Witam,
mam skromną aplikację webową, która korzysta z techniki long polling. Problemem jest sytuacja, kiedy żądanie sprawdzające sobie czeka, a inne chce się połączyć. Te drugie kończy dopiero po pierwszym. Może na przykładzie:
//plik odp.php
if($_GET['co']=='sprawdz')
{
for($i=0; $i<10; $i++)
{
if(/*spradzanie, czy jest coś nowego*/) {/*...*/}
else sleep(1);
}
}
elseif($_GET['co']=='inna_czynnosc')
{
print 0; //nawet jeśli to nic sensownego nie robi, to musi czekać
}
Sprawdzanie wykonuje się co 10s i zaraz po pustej pustej odpowiedzi znów jest wysyłane żądanie. Załóżmy, że nic nowego się nie dzieje.
Dla takiego wywołania w JS:
$.postJSON("odp.php?co=inna_czynnosc", czynnosc_po_pobraniu);
wywołanie funkcji czynnosc_po_pobraniu
nastąpi dopiero, kiedy zakończy się połączenie sprawdzania.
Czemu to musi czekać?
Próbowałem się łączyć z innym plikiem i wychodzi na to samo. Korzystam z jQuery. Bardzo proszę o jakąś radę.
Definicja postJSON:
jQuery.postJSON = function(u,d,callback) {
return jQuery.post(u, d, callback, "json");
}