Dotaz do mysql – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dotaz do mysql – PHP – Fórum – Programujte.comDotaz do mysql – PHP – Fórum – Programujte.com

 

Ellke
~ Anonymní uživatel
29 příspěvků
25. 9. 2018   #1
-
0
-

Dobrý den,
mám takový dotaz, na který si nedokážu odpovědět a rád bych se poradil s vyšší kapacitou.

Aplikace se skládá ze tří částí.

První část -> seznam (tabulka) "výzev" a jquery sahá do Mysql každých 5 sekund, aby seznam byl pořád aktuální.

Druhá čast -> Vkládání nových "výzev".

Třetí část -> Otevírá "výzvu" ze seznamu na opravení určitých informací, jenomže zde je Jquery, které hlídá každou změnu a následně posílá znovu do Mysql.

Otázka zní -> Můžu takhle řešit neustále ukládání do mysql ? I když tuhle aplikaci bude používat například čtyři uživatelé najednou ?

Moc děkuji za každý názor či poznatek

Nahlásit jako SPAM
IP: 2a00:1028:83d8:4c26:1c4d:c34e:87db:fb59...–
Kit+15
Guru
25. 9. 2018   #2
-
0
-

#1 Ellke
Použít to můžeš, databáze se přitom zřejmě bude nudit. Ovšem to opakované dotazování každých 5 sekund dobré není. Zkus se podívat, jak funguje WebSocket. Zjednodušeně ti server pošle zprávu, až když se na něm něco změní. Šetří to přenosovou kapacitu a přitom je reakce na změnu téměř okamžitá.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:d574:3a1b:8bf8:92eb...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ellke
~ Anonymní uživatel
29 příspěvků
25. 9. 2018   #3
-
0
-

   

Moc děkuji za odpověď       

rychle jsem se na to mrkl, a takže takhlem se to třeba používá u chatů ?

Nahlásit jako SPAM
IP: 2a00:1028:83d8:4c26:1c4d:c34e:87db:fb59...–
Ellke
~ Anonymní uživatel
29 příspěvků
25. 9. 2018   #4
-
0
-

Nějak se tím proplétám, ale moc tomu nerozumím jak přesně to funguje   

Nahlásit jako SPAM
IP: 2a00:1028:83d8:4c26:1c4d:c34e:87db:fb59...–
Kit+15
Guru
25. 9. 2018   #5
-
0
-

#3 Ellke
Přesně tohle se používá v chatech hlavně kvůli té svižnosti. Prostě si z Javascriptu otevřeš komunikační kanál se serverem, objednáš si typ dat, které chceš sledovat (vzor Observer). Když na serveru dojde ke změně, tak si projde seznam abonentů a tu změnu jim rozešle. Javascript na klientovi to zachytí a zobrazí na stránce. Běží to prakticky v reálném čase, hrají se přes to i MMORPG.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:d574:3a1b:8bf8:92eb...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ellke
~ Anonymní uživatel
29 příspěvků
26. 9. 2018   #6
-
0
-

Děkuji moc, určitě to použiji a pokud by to nevadilo tak sem potom hodím i hotový script.

Nahlásit jako SPAM
IP: 90.183.46.–
Ellke
~ Anonymní uživatel
29 příspěvků
26. 9. 2018   #7
-
0
-

Všechny weby a fora, která jsem nějak prošel mě nasměrovali na tuhle stránku:

http://socketo.me/docs/install

Já jsem to pochopil špatně ja myslel že xampp tuhle funkci už vlastní což jsem se asi zpletl že?

Nahlásit jako SPAM
IP: 90.183.46.–
Kit+15
Guru
26. 9. 2018   #8
-
0
-

#7 Ellke
Ratchet je jen jedna z možných nadstaveb.

Co je to xampp? :-) Pronajmi si server.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:d574:3a1b:8bf8:92eb...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ellke
~ Anonymní uživatel
29 příspěvků
26. 9. 2018   #9
-
0
-
Nahlásit jako SPAM
IP: 2a00:1028:83d8:4c26:1dec:e9cc:4523:2c58...–
Kit+15
Guru
26. 9. 2018   #10
-
0
-

#9 Ellke
Zatím jsem to nezkoušel. Zřejmě v tom bude Apache, PHP a MySQL.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:d574:3a1b:8bf8:92eb...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ellke
~ Anonymní uživatel
29 příspěvků
26. 9. 2018   #11
-
0
-

Ano přesně tak

Nahlásit jako SPAM
IP: 2a00:1028:83d8:4c26:1dec:e9cc:4523:2c58...–
Kit+15
Guru
26. 9. 2018   #12
-
0
-

#11 Ellke
Apache je tam vcelku zbytečný, PHP se dá spustit i jako server. Mívám jich takto spuštěných třeba i pět současně.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:d574:3a1b:8bf8:92eb...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ellke
~ Anonymní uživatel
29 příspěvků
26. 9. 2018   #13
-
0
-

Můžeš mě trochu zasvětit? Odkázat na nějakou stránku jak spustit php jako server ?

Nahlásit jako SPAM
IP: 2a00:1028:83d8:4c26:1dec:e9cc:4523:2c58...–
Kit+15
Guru
26. 9. 2018   #14
-
0
-

#13 Ellke
Udělej si zástupce, do kterého v kolonce "Cíl" napíšeš: 

C:\PHP\php.exe -S localhost:8080 -t C:\project\www

Do kolonky "Spustit v" dáš:

C:\PHP

Když na to klikneš, tak se ten PHP server spustí v adresáři C:\project\www\.

Do prohlížeče zadáš adresu http://localhost:8080

Je to popsáno v dokumentaci PHP, ale kdo by ji četl, že...

Velkou výhodou tohoto řešení je, že se ti chyby zobrazují přímo v tom okně terminálu. Najdeš tam třeba i status 404 na favicon.ico apod.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:d574:3a1b:8bf8:92eb...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ellke
~ Anonymní uživatel
29 příspěvků
27. 9. 2018   #15
-
0
-

Moc děkujííííí,

rozběhl jsem to, skvělé je na tom to, že člověk má plnou kontrolu což je parádní.

Trochu, hodně se v tom strácím. Nikdy jsem nevěděl, že to php jde spustit takhle jednoduše.

Trochu se vrátím k tomu Websocetu.

Nechce se mi moc používat nějaká nadstavba, nebo nemám na výběr? 

Pročítal jsem tuhle stránku: http://php.net/manual/en/book.sockets.php

Ale skoro vubec tomu nerozumím.

Myslel jsem si že to budou nějaké jednoduché syntaxe.

Na youtube používají ještě socet.io ale to je také nadstavba.

Děkuji, že se mnou máš takovou trpělivost 

Nahlásit jako SPAM
IP: 90.183.46.–
peter
~ Anonymní uživatel
4016 příspěvků
27. 9. 2018   #16
-
0
-

http://php.net/manual/en/sockets.examples.php

Server pro socket funguje tak,
- nastavis si php ne konenecny time_limit
- vytvoris si server (pripojis ho na port a tak) a pripojis na nej socket (jakoze hlavni socket - server pro uzivatele)
- vytvoris si nekonecnou smycku, ve ktere poslouchas, co se deje na socketech, a) hlavnim (1), b) ostatnich (0)
- pokud prijde neco na hlavni, zjistis, co to je. Pokud je to zadost o pripojeni, ta spustis vyvoreni dalsiho socket a odesles na novy socket handshake. Pokud to druha strana potvrdi, tak nechas socket otevreny. Pokud nee, socket odpojis a smazes ze seznamu ostatnich )
- a pak proveris vsechny otevrene sockety, zda jeste reaguji (druha strana je drzi otevrene) a kdyz ne, zavres je.
- a nebo z nich prectes message

Pri testovani si nastav limit jen tak na 5s.
Pokud server neukoncis, je nutne pak uplne vypnout php. Jinak ti bude blokovat na pc port, na kterem jsi server spustil. Je to takove hodne neprijemne, kdyz nevis, proc ti php odmita spustit stejny program, ktery jeste pred chvili bez problem spustil :)

Nahlásit jako SPAM
IP: 193.84.207.–
peter
~ Anonymní uživatel
4016 příspěvků
27. 9. 2018   #17
-
0
-

Je to trochu veda. Bohuzel nemam nikde jednoduchy kod. Mam uz do nej primichane vselijake slozitosti pro lepsi ovladani, ukoncovani serveru a tak.

Nahlásit jako SPAM
IP: 193.84.207.–
peter
~ Anonymní uživatel
4016 příspěvků
27. 9. 2018   #18
-
0
-

Asi nejlepe pouzitelny by mohl byt ten posl. example
http://php.net/…examples.php
-97 / Anonymous / 4 years ago
Aby bylo jasne, tak to odesial obecnou message. Ta byva typu ping, connect, disconnect, text (handshake, reply-handshake, text). Jako text si pak muzes odesilat zpravicky typu "tonda->all Ahoj". Anebo pouzit json a posilat slozitejsi konstrukce. Neresi to uzivatele, to musis resit dalsim systemem. Tohle prijme obecne zpravu. Neco jako na poste, spadne to do krabicky, tu krabicku si system preda pani postacce (dalsimu programu) a pani postatcka si precte adresy a teprve s tim neco dela. Ale to neni problem, zavolat dalsi sluzbu s logovanim uzivatelu, s databazi jmen a tak. Uzivatel ti jako text posle sve jmeno pri prihlaseni...
 

<?php

class MySocketServer
{
    protected $socket;
    protected $clients = [];
    protected $changed;
   
    function __construct($host = 'localhost', $port = 9000)
    {
        set_time_limit(0);
        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);

        //bind socket to specified host
        socket_bind($socket, 0, $port);
        //listen to port
        socket_listen($socket);
        $this->socket = $socket;
    }
   
    function __destruct()
    {
        foreach($this->clients as $client) {
            socket_close($client);
        }
        socket_close($this->socket);
    }
   
    function run()
    {
        while(true) {
            $this->waitForChange();
            $this->checkNewClients();
            $this->checkMessageRecieved();
            $this->checkDisconnect();
        }
    }
   
    function checkDisconnect()
    {
        foreach ($this->changed as $changed_socket) {
            $buf = @socket_read($changed_socket, 1024, PHP_NORMAL_READ);
            if ($buf !== false) { // check disconnected client
                continue;
            }
            // remove client for $clients array
            $found_socket = array_search($changed_socket, $this->clients);
            socket_getpeername($changed_socket, $ip);
            unset($this->clients[$found_socket]);
            $response = 'client ' . $ip . ' has disconnected';
            $this->sendMessage($response);
        }
    }
   
    function checkMessageRecieved()
    {
        foreach ($this->changed as $key => $socket) {
            $buffer = null;
            while(socket_recv($socket, $buffer, 1024, 0) >= 1) {
                $this->sendMessage(trim($buffer) . PHP_EOL);
                unset($this->changed[$key]);
                break;
            }
        }
    }
   
    function waitForChange()
    {
        //reset changed
        $this->changed = array_merge([$this->socket], $this->clients);
        //variable call time pass by reference req of socket_select
        $null = null;
        //this next part is blocking so that we dont run away with cpu
        socket_select($this->changed, $null, $null, null);
    }
   
    function checkNewClients()
    {
        if (!in_array($this->socket, $this->changed)) {
            return; //no new clients
        }
        $socket_new = socket_accept($this->socket); //accept new socket
        $first_line = socket_read($socket_new, 1024);
        $this->sendMessage('a new client has connected' . PHP_EOL);
        $this->sendMessage('the new client says ' . trim($first_line) . PHP_EOL);
        $this->clients[] = $socket_new;
        unset($this->changed[0]);
    }
   
   
    function sendMessage($msg)
    {
        foreach($this->clients as $client)
        {
            @socket_write($client,$msg,strlen($msg));
        }
        return true;
    }
}

(new MySocketServer())->run();
?>
Nahlásit jako SPAM
IP: 193.84.207.–
Ellke
~ Anonymní uživatel
29 příspěvků
27. 9. 2018   #19
-
0
-

Tak tohle bude ještě zajimavé. Moc děkuji za informace a teď mi už nezbývá než jenom zkoušet   

 

Nahlásit jako SPAM
IP: 90.183.46.–
Ellke
~ Anonymní uživatel
29 příspěvků
28. 9. 2018   #20
-
+1
-
Zajímavé
Kit +

Moc děkuji nakonec jsem Websocet vyřešil přes nadstavbu Ratchet.

<?php
set_time_limit(0);

use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
require_once 'D:\project\code\www\vendor\autoload.php';

class Chat implements MessageComponentInterface {
	protected $clients;
	protected $users;

	public function __construct() {
		$this->clients = new \SplObjectStorage;
	}

	public function onOpen(ConnectionInterface $conn) {
		$this->clients->attach($conn);
		// $this->users[$conn->resourceId] = $conn;
	}

	public function onClose(ConnectionInterface $conn) {
		$this->clients->detach($conn);
		// unset($this->users[$conn->resourceId]);
	}

	public function onMessage(ConnectionInterface $from,  $data) {
		$data = json_decode($data);
		$type = $data->type;
		switch ($type) {
			case 'refresh':
				
				$response_from = "<span style='color:#999'><b>zkouksa:</b> odpoved </span><br><br>";
			
				// Output
				$from->send(json_encode(array("type"=>$type,"msg"=>$response_from)));
				foreach($this->clients as $client)
				{
					if($from!=$client)
					{
						$client->send(json_encode(array("type"=>$type)));
					}
				}
				break;
		}
	}

	public function onError(ConnectionInterface $conn, \Exception $e) {
		$conn->close();
	}
}
$server = IoServer::factory(
	new HttpServer(new WsServer(new Chat())),
	1024
);
$server->run();
?>

 Proměná $response_from je tam vlastně už k ničemu, použival jsem to jako chat abych to celkově pochopil.

$response_from = "<span style='color:#999'><b>zkouksa:</b> odpoved </span><br><br>";

A client

<textarea id="chat_input" placeholder="Deine Nachricht..."></textarea>
		<script type="text/javascript">
		jQuery(function($){
			// Websocket
			var websocket_server = new WebSocket("ws:\\localhost:1024/");
			websocket_server.onopen = function(e) {
				websocket_server.send(
					JSON.stringify({
						'type':'socket',
						'user_id':<?php echo $session; ?>
					})
				);
			};
			websocket_server.onerror = function(e) {
				// Errorhandling
			}
			websocket_server.onmessage = function(e)
			{
				var json = JSON.parse(e.data);
				switch(json.type) {
					case 'refresh':
						alert("Hello! I am an alert box!");
						break;
				}
			}
			// Events
			$('#chat_input').on('keyup',function(e){
				if(e.keyCode==13 && !e.shiftKey)
				{
					var chat_msg = $(this).val();
					websocket_server.send(
						JSON.stringify({
							'type':'refresh',
							'user_id':<?php echo $session; ?>,
							'chat_msg':chat_msg
						})
					);
					$(this).val('');
				}
			});
		});
		</script>

ale nemám to dořešené pořádně. Ale jsem nadšený že to funguje. 

Děkuji za všechny rady, které jsem tu dostal ten php server je parádní.

Potom jsem se tu přiučil používat https://www.mysql.com/ , ale to bylo vcelku jednoduché.

Měl bych ještě jednu otázku.

PHP jak štak zvládám, ale když bych vzal tuhle aplikaci a udělal jí v c# nebude to lepší než přes webový prohlížeč ?

Nahlásit jako SPAM
IP: 2a00:1028:83d8:4c26:552d:94c7:ee89:3b1e...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 46 hostů

Podobná vlákna

"Mysql dotaz v dotaz" — založil Tomáš Sedlmajer

MySQL dotaz — založil JindraT

Jeden mysql dotaz — založil Apik

Ako na tento dotaz z mysql — založil c7ronaldo

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý