Cas Cornelissen
Cas Cornelissen

Reputation: 617

NodeJS + socket.io: Server not recieving emitted messages

I'm setting up a simple project using NodeJS and socket.io (and Express). My app.js looks like:

var express = require("express");
var app = express();
var port = 8003;
var __root = '/voidwalker/';
console.log('Listening on port: ' + port);

// Settings //
app.set('views', __dirname + '/tpl');
app.set('view engine', "jade");
app.engine('jade', require('jade').__express);
app.use(__root, express.static(__dirname + '/public'));

// Pages //
app.get(__root, function(req, res) {
    res.render('voidwalker');
});

// Socket.io //
var io = require('socket.io').listen(app.listen(port));
io.sockets.on('connection', function (socket) {
    socket.emit('message', {message: 'Welcome to the chat!'});
    socket.on('send', function(data) {
        console.log('TEST', data);
        io.sockets.emit('message', data);
    });
});

And my client-side js looks like:

window.onload = function() {
    var socket = io.connect('http://node.domain.com:8003/voidwalker/');
    if ( settings.debug ) console.debug('Loaded socket.io', socket);

    socket.on('message', function (data) {
        console.log('data recieved')
        console.log(data);
    });

    console.log(socket.emit('send', {'test': 'io.sockets.emit'}));
}

But it doesn't seem to work at all. Here is a copy of my log after a single client connected:

[webadmin@server ~]$ node /var/www/node/apps/voidwalker/app.js
Listening on port: 8003
   info  - socket.io started
   debug - client authorized
   info  - handshake authorized 4F7Zocz71RaQv7w5WOVg
   debug - setting request GET /socket.io/1/websocket/4F7Zocz71RaQv7w5WOVg
   debug - set heartbeat interval for client 4F7Zocz71RaQv7w5WOVg
   debug - client authorized for
   debug - websocket writing 1::
   debug - websocket writing 5:::{"name":"message","args":[{"message":"Welcome to the chat!"}]}

And my developer console returns this:

Loaded socket.io: SocketNamespace {socket: Socket, name: "/voidwalker/", flags: Object, json: Flag, ackPackets: 0…}

I'm expecting to see the return value of console.log('TEST', data); in my CLI when a client connects but it never shows up.

Upvotes: 3

Views: 1311

Answers (1)

Ulrich Thomas Gabor
Ulrich Thomas Gabor

Reputation: 6654

Are you sure about

var socket = io.connect('http://node.domain.com:8003/voidwalker/');

?

Only because you bind some middleware to this path, I would not expect socket.io to listen there too. Actually its default endpoint is /socket.io(see the endpoint option), which would not fit to the endpoint you are trying to connect to. I would give

var socket = io.connect('http://node.domain.com:8003/');

a try. The client uses socket.io as default endpoint so this should fit together then.

Upvotes: 1

Related Questions