Strange "long polling" problem.
Ian Hobson
ian at ianhobson.co.uk
Thu Dec 1 23:28:03 UTC 2011
Hi All,
I am having a problem with my Chatroom, that uses the long polling
module linked with nginx version 1.0.6
First the structure.
There are two http conversations going on with each client.
GETs, created by "on-load" and receiving the previous message, are
issued to the long polling "activity" address.
When the data arrives, it updates the screen, as well as triggering the
next "GET". Note - there is a small time gap between one message being
sent and the next being requested.
POSTS are triggered by user events. These send a separate XMLHTTPRequest
to a php program - handlechat.php
handlechat.php writes the relevant stuff to the database, and then
issues a "curl" to write data to the "publish" address, and replies with
an empty "200" reply.
It works 99.9% of the time. Which is not quite 100%. :(
When it fails
The client's GET is outstanding (reported by chrome)
The database has the missed message
The curl write to the publish address replies with first
queued messages: 1
last requested: 12 sec. ago (-1=never)
active subscribers: 2
then
queued messages: 1
last requested: 13 sec. ago (-1=never)
active subscribers: 2
I know both CURLs worked. The "missing" message is received by the
other user. It just is not received by the failing user.
If the failing user refreshes the screen, thus re-initialising
everything he getst the missing message twice, once from the log
and once from the stalled message.
As part of my testing, I tried INCREASING the delay between getting an
update and requesting the next. This made the problems much much worse.
It appears that messages posted after a reply is sent, and before the
next request is received are not being sent on.
Note - I return the etag in the header, so I think they should be.
What is the correct method to over-come this problem?
Regards
Ian
--
Ian Hobson
31 Sheerwater, Northampton NN3 5HU,
Tel: 01604 513875
Preparing eBooks for Kindle and ePub to give the best reader experience.
More information about the nginx
mailing list