2016-01-21 76 views
1

我很惊讶看socket.io文档,有没有事件是由socket.io当它被绑定到一个端口触发...我正在寻找一个“听”/“监听”事件......socket.io听/听事件

http://socket.io/docs/server-api/

我有与http.Server实例初始化这个简单的模块:

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

var socketServer = null; 

function getSocketServer(httpServer) { 

    if (socketServer === null) { 

     if (httpServer == null) { 
      throw new Error('need to init socketServer with http.Server instance'); 
     } 

     socketServer = io.listen(httpServer); 
    } 

    return socketServer; 

} 


module.exports = { 
    getSocketServer:getSocketServer 
}; 

,当我需要这个模块,我要听一个'听'事件。

喜欢的东西:

var socket = require('./socket-cnx').getSocketServer(); 

socket.on('listening',function(err){ 

}); 

我想主要的原因是因为on API用于事件名称。

+0

你为什么要听一个已经在轨道上的航天飞机上的“点燃发动机”事件?考虑到你的例子中的'socket'是调用io.listen()*的*结果,我认为假设它已经在监听是安全的。 –

+0

@mcmillan没有任何意义... http.Server具有监听功能和('聆听')事件... –

+0

@mcmillan,在工程领域我非常确定,如果您启动“点火引擎”调用,倾听“引擎点燃”事件永远不会是多余的。总有一个错误可能发生在某个地方,并且越早发现它越好...您可以从Peter Lyons的下面看到一些信息,其中可能会回答一些问题 –

回答

2

所以socket.io本身不听。 http服务器侦听,这是将发出listening事件的对象。

如果允许socket.io为您创造的HTTP服务器实例,该实例发布的httpServer property of your io instance所以你应该能够做到io.httpServer.on('listening', myOnListeningHandler)

这里的工作示例程序:

var io = require('socket.io')(4001) 

io.httpServer.on('listening', function() { 
    console.log('listening on port', io.httpServer.address().port) 
}) 
+0

好的谢谢,但如果我使用require('socket.io')(4000),其中端口4000不是我的http服务器相同的端口?那我该如何倾听这个听力事件呢?我意识到我刚刚提到的代码创建了一个新的http.Server实例,但是我怎么能听到这个新服务器的事件?对? –

+1

回复更新为解决这种情况下的链接到源代码。 –

+0

欢呼,这是很酷的东西感谢您的帮助。它让我想知道为什么socket.io与httpServer有什么关系,但我想这是我阅读更多内容的地方。 –