2016-01-21 5 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

Почему вы слушаете событие «igniteEngine» на космическом шаттле, который уже находится на орбите? Учитывая, что в вашем примере «сокет» является * результатом вызова io.listen() *, я думаю, можно с уверенностью предположить, что он уже прослушивает. –

+0

@mcmillan, который не имеет смысла ... http.Server имеет функцию прослушивания и событие («прослушивание») ... –

+0

@mcmillan, в инженерном мире. Я уверен, что если вы запускаете вызов «зажигания» , прослушивание события «двигатель зажжен» никогда не бывает лишним. Всегда есть ошибка, которая может произойти где-то, и чем раньше вы ее поймаете, тем лучше ... вы можете увидеть некоторую информацию от Питера Лиона, ниже которой, вероятно, ответят на некоторые вопросы –

ответ

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, но я думаю, что здесь я читаю больше вещей. –

Смежные вопросы