Ajax Long Polling Problem.. denke mit Apache..

Alles, was den Apache betrifft, kann hier besprochen werden.

Ajax Long Polling Problem.. denke mit Apache..

Postby Stiba » 28. August 2009 23:35

Hi leute..
mal seit langem wieder ein Thema das ich auch nach langer suche nicht direkt lösen konnte...

Bisher habe ich mit nem javascript Intervall am Server nach neuen Nachrichten geschaut und dementsprechend das frontend geupdated..
Nun habe ich mir aber mal genauer die Methode, die ua. meeboo.com verwendet angeschaut..

hab nen Serverseitiges Script das in ner schleife nach den neuen messages schaut (max 30 sek. lang) , und beim erfolg diese ausgibt und dann abbricht. Das JS verarbeitet die Messages dann auf der anderen Seite und ruft per ajax wieder selbiges script auf das wieder so lange in der loop bleibt bis neue nachrichten ankommen. usw.
während der ajax request aber läuft, nimmt apache allerding keine weiteren anfragen der selben IP mehr an bzw. beantwortet diese erst wenn der eigentliche request fertig ist.. was ja immer nur bei neuen messages bzw. nach 30 Sekunden passiert.


weiss wer welche Einstellungen in der httpd.conf für mich interessant sind?
Hab schon einiges wie MaxClients, MaxRequestsPerChild usw. probiert aber bisher ohne Erfolg.

ich hoffe mir kann dabei wer weiterhelfen, will den unnötigen Overhead der bisherigen Version endlich los werden..

Vielen Dank im vorraus
Last edited by Stiba on 31. August 2009 01:12, edited 1 time in total.
Stiba
 
Posts: 7
Joined: 28. August 2009 23:32

Re: Ajax Long Polling Problem.. denke mit Apache..

Postby Stiba » 30. August 2009 23:53

Hallo, da ich nicht weiss ob meine Beschreibungen ausgereicht haben hier noch mal mehr Details zu meinem Problem.

dazu hab ich im erstem Diagramm das Problem wie es sich derzeit darstellt und im 2. den Sollzustand skizziert.

Amerkungen:
-die gestrichelten Linien die vom rechten Rand in die Diagramm zeigen waren jeweils mit "sleep 1000ms" gekennzeichet, was jedoch abgeschitten wurde..
- In beiden Diagrammen wird als 1. asyncron async_check_for_new_messages() auf dem Server via JS/Ajax aufgerufen. check_in_db_for_new_new_messages() gibt dann jeweils im 3. Durchlauf/Versuch neu gefunden messages zurück.
-Währenddessen erfolgt aber vom Client ein weiterer Aufruf auf dem Server mit asyc_or_sync_getOtherData(), welcher im IST-Zustand erst beantwortet wird nachdem das getMessage Script seine Daten zurück gegeben hat(würde ebenfalls nach 30 Versuchen no zurück geben und der request dann vom front-end erneut aufgerufen).
Er soll aber wie man im 2. Diagramm sehen kann direkt beantwortet werden.


Während der async_check_for_new_messages() request also läuft, werden keinerlei weiterer Requests gleicher IP mehr beantwortet. Liegt übrigens auch defintiv nicht am Browser, da selbst ganz normale GET requests in einem 2. von 1. verschiedenen Browser währenddessen auch nicht beantwortet werden.


Image

Image
Stiba
 
Posts: 7
Joined: 28. August 2009 23:32

Re: Ajax Long Polling Problem.. denke mit Apache..

Postby Stiba » 31. August 2009 16:59

und noch mal die Firebugsicht bzg des Problems...

hier sieht man bis auf den letzten request wie es seien sollte..
also bevor ich den letzten request getChannels.php?folder_id=2 gestartet habe, hab ich einem weitern Fenster nebenbei den LongPoll gestartet.
Wie man sieht hängt der Request hier und wird nicht beantwortet.
Image


Hier sieht man den eigentlichen LongPoll Request..
4 mal hat der Request nach 30 Sekunden abgebrochen da keine neuen Messages da waren..
im fünften Versuch wurde auf der Server Seite bereits nach 11 von 30 Sekunden eine neue Message regestriert. -> request bricht ab, Message wird ausgegen.. und der LongPoll neugestartet.
Image
Stiba
 
Posts: 7
Joined: 28. August 2009 23:32

Lösung

Postby Stiba » 31. August 2009 17:25

joha joha joha...
DEADLOCK zwischen den paralell gestarteten SESSIONS...
Das LongPoll Script hat am anfang session_start() aufgerufen(und erst am ende wieder freigegeben)... und die paralellen request ebenfalls..
Lösung war.. die benötigten Session Infos im Long Poll Script in Vars. zwischen zu speichern und vor der WHILE Schleife ein session_write_close(); anzuwenden...

vieleicht hilft das ja in zukunft iwem bei ähnlichem Problem...

so far
Stiba
 
Posts: 7
Joined: 28. August 2009 23:32


Return to Apache

Who is online

Users browsing this forum: No registered users and 4 guests