我正在尝试使用socket.io和node.js的简单聊天应用程序here。每次我重新启动node.js服务器时,socket.io会自动重新连接并以某种方式创建一个与服务器的连接,即客户端现在会收到两次相同的聊天消息。我该如何解决这个问题?
答案 0 :(得分:15)
默认情况下断开socket.io重新连接丢失的连接,重新运行connect
事件。因此,每次重新连接时,都会添加一个事件侦听器来接收消息。因此,您可以获得多个等于服务器重启/连接丢失的消息。
Incoming Chat:
Connected
dsdadsada
Disconnected //recieved by 1st listener
Connected //added 2nd listener
adasd
Disconnected //recieved by 1st listener
Disconnected //recieved by 2nd listener
Connected //added 3rd listener
您应该使用once
而不是on
来监听第一次连接,iosocket.once('connect', function () {
仅在第一次运行事件处理程序。尝试
iosocket.on('connect', function () {
而不是
{{1}}
答案 1 :(得分:5)
尝试以这种方式编写 index.html :
iosocket.on('connect', function () {
$('#incomingChatMessages').append($('<li>Connected</li>'));
});
iosocket.on('message', function(message) {
$('#incomingChatMessages').append($('<li></li>').text(message));
});
iosocket.on('disconnect', function() {
$('#incomingChatMessages').append('<li>Disconnected</li>');
});
这可能是由其他2个eventlisteners注册到connect事件引起的。 当客户端断开连接时,其他2个侦听器仍然在这里,并且不会被取消注册。