2016-01-21 82 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有什麼關係,但我想這是我閱讀更多內容的地方。 –