Skip to main content

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.


Comments

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.