Reputation: 847
Problem socket.io NOT working
Details
express [folder]; cd [folder]; npm install;
npm install socket.io
Setup
Client
var socket = io.connect('http://example.com:3000');
socket.on('connect', function() {
console.log('connected');
});
socket.on('message', function(msg){
console.log(msg);
});
socket.on('disconnect', function() {
console.log('disconnected');
});
socket.on('error', function (e) {
console.log('System', e ? e : 'A unknown error occurred');
});
Server
[...]
app.listen(3000);
// socket.io setup
var socket = require('socket.io').listen(app);
// socket.io connection establishment
socket.on('connection', function (client) {
client.send("hello");
console.log("hello", client);
});
Why is connection event never fired?
Upvotes: 14
Views: 51790
Reputation: 440
The following did a trick for me with: socket.io-client: "^0.9.16"
io.connect("http://localhost:4000", {'force new connection': true});
Now 'connect' event fires consistently and there is no re-use.
I figured out this option by examining socket.io-client/lib/io.js line: 192 Since I can't even find this io.js file in github, I think there is refactoring in future releases, and this option might not work.
At least this might be helpful to somebody who will take this temporary work around.
Upvotes: 1
Reputation: 2590
Ricardo Tomasi is correct, saved my life, i was going crazy.
Altough things changed, we are in 2013, there's still an issue opened (since 2 years) on this
probably something changed, anyway to register the 'connect' event i had to do this:
var openSocket = function (uniqueID) {
var appSocket = io.connect('/'+uniqueID, { transports: ['websocket', 'xhr-polling']});
appSocket.socket.on('connect', function () {
console.log('i did connect.');
});
return appSocket;
};
Upvotes: 1
Reputation: 35283
Took a while to notice... the connection
event is emmited on io.sockets
. In your code this would be
socket.sockets.on('connection', function (client) {
client.send("hello")
console.log("hello", client)
})
You should use io
instead of socket
as the var name to avoid this confusion.
Upvotes: 14