Autor Zpráva
TomasJ
Profil
Zdravím. Omlouvám se ale nevím, jak ve zkratce toto téma nazvat.
Pokouším se vytvořit klienta k UDP serveru, který bude číst zprávy, které mi bude posílat. To už jsem dokázal, ale za pomoci neefektivního nekonečného cyklu while(true){...} a usleep(xxx...);. Vše jde jakž-takž v pohodě. Jakž-takž, protože díky nekonečné smyčce a uspávání PHP, se stránka stále načítá. Nejde asi o chybu, ale může to zmást uživatele, kteří na web přijdou. Když jsem kamarádovi stránku ukázal, řekl mi, že mu stránka nejde, že se pořád načítá.
Dá se toto načítání nějak skrýt?

DODATEK:
Nekonečnou smyčku jsem použil proto, že se snažím vytvořit trvalé spojení s UDP serverem, ale bohužel lepší řešení, jak toto, jsem nevymyslel. Hledal jsem návody jak vytvořit toto spojení, jenže nenašel jsem. Už jsem narazil na WebSockets, jenže to je nepřípustné, kkdyž to zatím funguje jen ve FF 10 a Chrome. Toto je spolehlivé, PHP funguje v každém prohlížeči stejně. Nicméně je to neefektivní.

Ptal jsem se i tady na diskusi jak vytvořit takové spojení, nikdo se k mému vláknu nevyjádřil. A abych neporušoval pravidla diskuse, vlákno jsem neoživoval, a nebudu zakládat duplicitní.

Pro lepší nástin je tu ukázka. Prosím pravé strany okna si nevšímejte, je to jen zkušební na posílání dat serveru, ale je to momentálně odstavené.
http://samp.k3s4.sk/chat.php.
Uvidíte jen prázdné okno a nic se dít nebude, jelikož na herním serveru, odkud se zprávy posílají UDP serveru, nikdo není a nepíše. Pokud budete chtít vidět jak to funguje, mohu se přihlásit, napsat pár zpráv. Jenže není žádná historie a nebudu na server chodit kdykoliv.
Radek9
Profil
TomasJ:
Zatím asi nejfunkčnější řešení je AJAX long-polling. Funguje to vlastně na stejném principu jako tvoje řešení, ale data se načítají AJAXem, takže to neudělá nic s načítáním stránky. Ve své podstatě to funguje tak, že ty pošleš požadavek na nějaký ten soubor a ten neustále zkouší, dokud pro uživatele nemá zprávu (takže ten while a sleep). Pokud najde, tak se cyklus breakne, AJAXu se odešlou data a ten si v callbacku tento proces zavolá znovu. (Třeba s nějakým zpožděním.)
TomasJ
Profil
Ale to uz nebude stale spojeni kdyz se porad bude pripojovat na soubor ne? Nebo jak jsi to myslel? Neni nekde nejaka ukazka? Omlouvam se ze nepisu s diakritikou, ale pres mobil bych to psal vecnost.
Radek9
Profil
TomasJ:
Vesmě nějak takhle.
PHP:
while(true){
  //MySQL výběr dat
  if(NAJDE){
    echo DATA;
    break;
  }
  usleep(100000);
}

JS:
function callback(data){
  //něco s data
  load();
}
function load(){
  AJAX("soubor.php", callback);
}
load();
TomasJ
Profil
Ten soubor.php, to je asi soubor kde se pripojuji k UDP a vracim data ze? To znamena ze za kazdym load() se znovu vytvori nove spojeni k serveru ale to ja nechci takto... Potrebuji aby se pripojil jednou na zacatku (window.onload) a pak uz se nepripojoval.
Radek9
Profil
TomasJ:
To jsou ty sockety, o kterých jsi mluvil. Jejich podpora ale není nejlepší, takže bych to nepoužíval. Jiná plynulá možnost než toto snad ani není. ;-)

Ale proč by se to nemohlo připojovat vícekrát? Bude to fungovat prakticky stejně.
TomasJ
Profil
No to ano, ale bude to zatezovat vice server. A jelikoz stroj slouzi i pro multiplayerovou hru melo by to vliv i na ten herni server. Takze jine reseni jak se vyhnout neustalemu pripojovani k UDP serveru, neni? To je spatne... To radeji necham stale "prenaseni dat ...". Jde mi hlavne o trvale pripojeni a pak az o to zbaveni se "prenaseni dat..". Spojeni ma pro me vetsi prioritu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: