Autor Zpráva
Darker
Profil
Asi před dvěma měsíci jsem narazil při long polingu (chat) na tento problém:
Zatímco se čekalo na zprávy ze serveru, odeslal uživatel zprávu. Ale ta se (aspoň přes ajax) nenechá odeslat do chvíle, než se ukončí 5sekundové čekání na nové zprávy.
Vytvořil jsem proto jinou metodu, kde místo post požadavku načítám javascriptový soubor (normálně element). No, nepomohlo to. POST požadavek dál trčí až do chvíle, než se načte skript. To nelze načítat více dat současně? A pokud ne, nelze ukončit načítání bez odpovědi, a přednostně odeslat zprávu?
Edit: Někdy se dokonce stane, že se požadavek úplně zasekne a nedostane se na něj řada.
Chamurappi
Profil
Reaguji na Darkera:
To nelze načítat více dat současně?
Myslím, že lze. Jestli komunikaci někdo omezuje, tak to není prohlížeč.
Asi by se hodila ukázka.
Darker
Profil
Chamurappi:
Asi by se hodila ukázka.
Běží mi to na localhostu, nicméně stejné problémy jsem měl online. Prohlížeč to asi nedělá. Problém jsem částečně vyřešil tím, že jsem před odesláním nové zprávy do chatu zrušil metodou abort požadavek čekající na nové zprávy.
Nicméně i tak to chvíli čeká, nevím na co. Pokud načítání nových zpráv zakážu, odesílá se to okamžitě.
Na odesílání i příjem používám lehce upravené "univerzální funkce pro ajax" z digitálního citrónu.

Všiml jsem si že při příjmu nových zpráv se data přijmou a pravděpodobně nějak dají zpracovávat ještě před ukončením requestu. Bylo by príma kdybych mohl po přijetí nové zprávy pokračovat v načítání a poslat ji klientovi, ale nejsem si jistý jak s tím pracovat.

Taky by mě zajímalo, jak to udělám, když chci podržet spojení ale zaslat nový požadavek. Tedy například ukončit čekání na zprávy a zaslat vrámci daného spojení novou zprávu. Přeskočil bych tak potřepání rukou a bylo by to rychlejší.
Darker
Profil
Tady je ukázka:
http://chat.jmareda.tk/index.php
Pokud si pustíte firebug nebo dragonfly, uvidíte, že se příspěvek odesílá dlouho.
Pokud potom vypnete načítání nových požadavků příkazem:
chat.abort();
chat.active=true;  //Aby vam to dovolilo psat i pro Offline stavu
najednou to pojede jako po másle. Rozhodně to nepotrvá 3s. (odesláním zprávy se přopojení obnoví, takže další zpráva půjde zas pomalu)
YOYO
Profil
nedávno sem řešil podobný problém,.. to že server nemohl zpracovat 2 požadavky najednou bylo díky sessions (po celý běh scriptu jsou otevřené pro zápis a nemůže tak do nich zapisovat jiný script) pomohla mi funkce session_write_close();

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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

0