我在这里尝试使用 socket.io 和 node.js 构建一个简单的聊天应用程序。每次我重新启动 node.js 服务器时,socket.io 都会自动重新连接,并以某种方式再创建一个与服务器的连接,即客户端现在会收到两次相同的聊天消息。我该如何解决?
问问题
9903 次
2 回答
20
默认情况下,断开连接 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 () {
于 2013-05-28T15:52:42.837 回答
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 个事件侦听器注册到了连接事件。当客户端断开连接时,其他 2 个侦听器仍将在这里并且不会取消注册。
于 2013-08-26T13:17:12.717 回答