重新连接后,在socket.io-client中重新注册事件

我有一个socket.io客户端应用程序,看起来像这样:

var port = 1234; var host = "http://host.com"; var ioc = require( 'socket.io-client' ); var isConnected = false; var socket; connect(); function connect() { socket = ioc.connect( host + ":" + port); } socket.once( "connect", function () { isConnected = true; console.log( 'Client: Connected to port ' + port ); socket.emit( "status message", "Hello Server", function ( message ) { console.log( 'Echo received: ', message ); }); }); socket.once( "disconnect", function () { isConnected = false; console.log( '[ALERT]: Disconnected from Server (' + host + ":" + port + ')! '); }); socket.on("reconnect", function(){ console.log('Reconntected'); isConnected = true; }); 

问题是,在重新连接事件被调用之后,其他事件再也不会被调用。 特别是“断开”事件从来没有被称为重新连接后,这对我很重要。

使用socket.on( "disconnect", function () {...如果你想保持注册,而不是重新注册它。

你正在使用.once这意味着它只会被调用一次。

https://nodejs.org/api/events.html#events_emitter_once_event_listener

emitter.once(事件,监听器)

为该事件添加一次侦听器。 这个监听器只有在下一次事件被触发时才被调用,之后被移除。