Socket.IO using XHR-polling in IE
node.js, socket.io
Solution
To make things even more crazy, everything works fine in IE if I turn on the development tools (F12).
Not crazy at all. Internet Explorer does not have `console` object until you open development tools ( `console.log` throws an exception which blocks your code ). Remove all `console.log` lines and see if it works. If you want to debug scripts, then you should write your own custom debuging tool. Here's a simple example:
window.debug = function() {
if (window.console && window.console.log) {
window.console.log.apply( window.console, arguments );
}
}
debug("JSON-parse error!");
Let us know if it works.
Problem
I'm using NodeJS and Socket.IO to implement persistent connections between my server and the clients. The Socket.IO-server itself connects to another PHP server that processes the incoming messages and sends the result back to NodeJS. There, the message is modified a bit and sent back to the client. So far, everything is working fine. Chrome, Firefox and Opera are using the native websockets, and all messages are received correctly. However, Internet Explorer and Iceweasel are using the XHR-polling fallback which behaves a bit weird ... The client receives exactly two messages, after this the client can send messages to the server, yet no message is sent back to the client. The message sent from the XHR-client are received and processed correctly - every websocket client gets the message sent. Using loglevel 3 in Socket.IO I get the following output: ``` debug: clearing poll timeout debug: xhr-polling writing 5:::{"message":"..."} debug: set close timeout for client VjrHOXHjjg76bD_qx46C debug: setting request GET /socket.io/1/xhr-polling/VjrHOXHjjg76bD_qx46C?t=1345663246573 debug: setting poll timeout debug: clearing poll timeout debug: xhr-polling writing �262�5:::{"message":"another message ..."}�200�5:::{"message":"message #3 ..."} debug: set close timeout for client VjrHOXHjjg76bD_qx46C debug: discarding transport debug: cleared close timeout for client VjrHOXHjjg76bD_qx46C ``` The first message (log line #2) is received by the XHR-client, yet those messages in line #7 disappear. I've also noticed the special chars in line #7, yet I don't know if they are responsible for the bug. When sending a message to the server, the debug output is: ``` debug - xhr-polling received data packet 5:::{"message":"input by the client"} ``` This message also isn't sent back to the XHR-client, yet every connected websocket-client receives it. To make things even more crazy, everything works fine in IE if I turn on the development tools (F12). The NodeJS client that connects to the PHP server itself is quite simple (using the simpletcp library): ``` // Client is the simpletcp-client client.on("data", function(data) { var msgData; try { msgData = JSON.parse(data.toString("utf8")); } catch(e) { console.log("JSON-parse error!"); return; } var socket = getsock(msgData.sid); // msgData.sid is the socket.id to identify the socket if(socket == null) { console.log("Client not found!"); return; } socket.emit("message", { "message" : msgData.message }); }); ``` What I'm asking now - is this a Socket.IO bug or is something in my script wrong?