socket.io - 'connect' event does not fire on the client
javascript, node.js, socket.io
Solution
Make sure that both client and server have same major version of socket.io. For example, combination of `socket.io@2.3.0` on server and `socket.io-client@3.x.x` at client leads to this case and the 'connect' event is not dispatched.
Problem
I am trying to get started with node.js and socket.io. I have a very (very) simple client-server test application and i can't get it to work. The system is set up on a windows machine with an apache server. The apache is running on `port 81` and the the socket.io is set up to listen to `port 8001` Server - server.js ``` var io = require('socket.io').listen(8001); io.sockets.on('connection', function (socket) { console.log('\ngot a new connection from: ' + socket.id + '\n'); }); ``` Client - index.html ``` <!DOCTYPE html> <html> <head> <title>node-tests</title> <script type="text/javascript" src="http://localhost:8001/socket.io/socket.io.js"> </script> <script type="text/javascript"> var socket = io.connect('http://localhost', { port: 8001 }); socket.on('connect', function () { alert('connect'); }); socket.on('error', function (data) { console.log(data || 'error'); }); socket.on('connect_failed', function (data) { console.log(data || 'connect_failed'); }); </script> </head> <body> </body> </html> ``` After starting my server using `node server.js` the standard (expected) output is written to the server console: ``` info: socket.io started ``` When I open `index.html` in the browser (chrome in my case - didn't test on other browsers) the following log is written to the server console: ``` info: socket.io started debug: served static content /socket.io.js debug: client authorized info: handshake authorized 9952353481638352052 debug: setting request GET /socket.io/1/websocket/9952353481638352052 debug: set heartbeat interval for client 9952353481638352052 debug: client authorized for got a new connection from: 9952353481638352052 debug: setting request GET /socket.io/1/xhr-polling/9952353481638352052?t=1333635235315 debug: setting poll timeout debug: discarding transport debug: cleared heartbeat interval for client 9952353481638352052 debug: setting request GET /socket.io/1/jsonp-polling/9952353481638352052?t=1333635238316&i=0 debug: setting poll timeout debug: discarding transport debug: clearing poll timeout debug: clearing poll timeout debug: jsonppolling writing io.j[0]("8::"); debug: set close timeout for client 9952353481638352052 debug: jsonppolling closed due to exceeded duration debug: setting request GET /socket.io/1/jsonp-polling/9952353481638352052?t=1333635258339&i=0 ... ... ... ``` In the browsers console I get: ``` connect_failed ``` So it seems like the client is reaching the server and trying to connect, and the server is authorizing the handshake but the `connect` event is never fired in the client, instead the connect method reaches its `connect timeout` and `max reconnection attempts` and gives up returning `connect_failed`. Any help\insight on this would be helpful. Thank you