0

I have the following express/socket.io application:

var express = require('express');
var sio = require('socket.io');

var app = express();
var server = require('http').createServer(app).listen(3000, function () {
   console.log('Server listening on 3000 port');
});

var io = sio.listen(server);

As you can see from the code above we listen to 3000 port and pring Server listening on 3000 port message to console. Now I need to print same message for socket.io listen method but this method one does't get callback. So I need something like the following:

var io = sio.listen(server);
io.on('ready', function () {
     console.log('Socket io server listening...');
});

How could I bind to listen event for socket.io?

kaytrance
  • 2,657
  • 4
  • 30
  • 49
Erik
  • 14,060
  • 49
  • 132
  • 218

2 Answers2

2

Here's a concise way:

var express = require('express');
var app     = express();
var server  = app.listen(3000);
var io      = require('socket.io')(server);

server.on('listening', function() {
  console.log('Server listening on 3000 port');
});

This way, socket.io will piggyback on top of Express, and when the listening event fires, socket.io is ready too.

If you want, you can replace the listening event handler by passing it as a callback to app.listen().

robertklep
  • 198,204
  • 35
  • 394
  • 381
0

You are doing it a bit wrong. If you init express app and socket.io like this

httpServer = http.createServer( app ).listen( process.env.PORT, process.env.IP || "0.0.0.0", function() { 
    console.log( "Express app initialized" );
    var io = require( 'socket.io' )( httpServer );
});

it will call attach method of socket.io which indeed does not have a callback.

What you could do is check io variable later, it should not be null. Or even better wrap it in try/catch like this

var io, httpServer;
httpServer = http.createServer( app ).listen( process.env.PORT, process.env.IP || "0.0.0.0", function() { 
    console.log( "Express app initialized" );
    try {
        io = require( 'socket.io' )( httpServer );
        if( io != null ) {
            console.log( "Socket server ready!" )
            // do what is needed later
        }
        else {
            throw new Error( "Returned null after attaching to express server." );
        }
    }
    catch( error ) {
        console.log( "Failed to init socket.io!", error );
    }

});
kaytrance
  • 2,657
  • 4
  • 30
  • 49