node.js - socket.io 重新连接后再创建一个连接

标签 node.js socket.io

我正在尝试一个简单的聊天应用程序 here使用 socket.io 和 node.js。每次我重新启动 node.js 服务器时,socket.io 都会自动重新连接,并以某种方式再创建一个与服务器的连接,即客户端现在会收到两次相同的聊天消息。我该如何解决这个问题?

最佳答案

默认情况下,在断开连接时,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 () {

关于node.js - socket.io 重新连接后再创建一个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16787996/

相关文章:

json - 如何使我的存储库成为 package.json 中的依赖项并让它提示我输入信息?

node.js - socket.io-client-cpp 无法通过 https 连接到 Heroku 上的 Node 应用程序

javascript - 浏览器如何知道在哪里可以找到 socket.io?

javascript - 在 node.js/socket.io 中,如何判断一个对象是否是一个套接字实例?

node.js - 如何从使用socket.io的 Controller 函数发出信号?

node.js - EmberJS 全局 websocket 连接

json - 从自定义文件系统目录离线透明地安装 npm 包

javascript - NodeJS 和 MongoDB。 POST 请求获取 404 代码

node.js - 将对象传递给 Handlebars 后,如何在脚本标记中访问该对象?

node.js - 除 meteor 和 meteor 束的主要区别是什么?