2015-11-24 21 views
0

我有以下快遞/ socket.io應用:如何綁定到socket.io上的ready事件?

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); 

正如你可以從代碼中看到上面我們聽3000端口和普林Server listening on 3000 port消息安慰。現在我需要爲socket.io listen方法輸出相同的消息,但是這種方法沒有得到回調。所以我需要像下面這樣的東西:

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

我怎麼能綁定到socket.io監聽事件?

回答

0

你這樣做有點不對。如果INIT表達應用和socket.io這樣

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); 
}); 

它會調用socket.io attach方法,這的確沒有回調。

你可以做的是檢查io後面的變量,它不應該爲空。甚至更好的把它包在try/catch這樣

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); 
    } 

}); 
2

這裏有一個簡潔的方式:

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'); 
}); 

這樣,socket.io將搭載在快遞的頂部,當listening事件觸發,socket.io準備過。

如果需要,您可以將它作爲回調傳遞給app.listen()來代替listening事件處理程序。