Dwa połączenia ajax

0

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");
}
0

Jeżeli chcesz, aby po wywołaniu np.$.post kod szedł dalej, to musisz skorzystać z $.ajax z ustawieniem async: false. Dzięki temu możesz wywołać kilka zapytań na raz.
http://api.jquery.com/jQuery.ajax/

0

To nie może być to. Z resztą dokumentacja mówi: "By default, all requests are sent asynchronously". poza tym mam trzy żądania "inicjujące" i one są wykonywane równolegle...

0

pokaż cały skrypt (JS)

0

Pełny kod zajmowałby niepotrzebnie miejsce, pominąłem analizę odpowiedzi, ale problem występuję także w dokładnie takiej funkcji jak poniżej:

oDane.odswiez = function()
{
	$.postJSON("odp.php?co=wyslij_dane", function(odpowiedz) 
	{	
		if(odpowiedz!="0")
		{	
			//analiza odpowiedzi
			
		}	
		setTimeout(function() {oDane.odswiez()}, 500);
	});
		
}

Wszystkie inne wywołania do plików php są wstrzymywane:

$.postJSON("odp.php")
$.postJSON("odp.php?cokolwiek")
$.postJSON("index.php")

Zaś wywołania do plików txt działają

Przecież sleep w php nie usypia całego serwera (interpretera php), nie?

Coś jest nie tak w innym miejscu. Na czystym pliku z pokazaną wyżej funkcją jest ok. Będę szukał jutro

1

Dlaczego skoro dane wysyłasz postem to szukasz ich w $_GET? //Nieważne, już widzę

Problem leży najpewniej po stronie php, musiałbyś pokazać cały kod strony (generalnie nie możesz sie odwoływać do zmiennej $_SESSION bo wtedy PHP zacznie kolejkować(?) requesty - chyba że w którymś zgłoszeniu (właściwie we wszystkih oprucz 1-go) zablokujesz sesje do zapisu wtedy requesty bedą sie wykonywały nizależnie).

0

Tak, problem tkwił w sesjach. Nie miałem pojęcia, że to blokuję. Po odczytaniu danych z sesji użyłem session_write_close i wszystko śmiga:) Wiedząc co wpisać do google znalazłem to:
http://forum.php.pl/lofiversion/index.php/t149339.html
Wielkie dzięki za pomoc, pewnie długo bym szukał, że to sesje wstrzymują ruch.

1 użytkowników online, w tym zalogowanych: 0, gości: 1