Thursday, January 12, 2012

AJAX one way client to server push possible?


I'm trying to write a javascript web app that will communicate with a custom java server using AJAX. My client app needs to send pieces of data at irregeular intervals, sometimes multiple times per second, and does not need any response data from the server. Is there a way to keep an XmlHttpRequest connection open and reuse it to send this data without ever closing or getting a response?



On the client side, I'm going by this post to reuse the XmlHttpRequest: http://keelypavan.blogspot.com/2006/03/reusing-xmlhttprequest-object-in-ie.html and it seems to be working. I'm able to send repeated requests to the server without getting a response.



But on the server side my main problem seems to be with java.net.SocketServer. I'm creating a single SocketServer and putting the accept() method in an infinite loop to handle requests. When a request comes in, the loop fires exactly 3 times with the same request data - this is if and only if I don't write to the outputstream of the socket before closing it. If I write to the stream (aka sending a response to the client), everything works and the request is processed only once and accept() waits for the next one.



Is this kind of thing even possible? To send a one-way stream of data without having the client overhead of handling a response? I could try only processing 1 of every 3 requests in my loop, but I have no idea what's going on behind the scenes here. Thanks!



EDIT - I've realized that everything works as expected using a safari browser on a client computer on the same wifi as the server. The problem of 3 requests being processed only happens when using iphone safari (iphone on the same wifi network). So the question is how the xmlhttprequest is differing between these 2 situations and how to solve/detect the difference.

No comments:

Post a Comment