我尝试使用node.js作为带有socket.io的服务器(通过https
连接服务器对象,客户端使用选项secure: true
连接)和JavaScript前端。
在服务器上,如果登录尝试失败,我将调用:
socket.emit('unauthorized');
socket.disconnect();
在客户端我有:
this.Socket = io.connect(server, { secure: true });
this.Socket.on('disconnect', this.Socket_Disconnect);
this.Socket.on('unauthorized', this.Socket_Unauthorized);
我能够看到断开连接事件触发(参数设置为['booted']
,无论我是否将任何参数传递给socket.disconnect()
,但未经授权的事件永远不会发生。我是否试图以错误的方式传递此消息?
我在这里的理由是我希望能够发送不同类型的 disconnect
事件,例如:
注销
- 客户端应停止尝试连接,直到用户登录
服务器重新启动
- 客户端应重新尝试连接,直到连接成功
我需要能够在客户端知道为什么客户端被服务器断开连接,是否至少有某种方法可以确保在调用 socket.disconnect()
之前已发送消息?
编辑:这似乎特定于 Node.js cluster
代码 - 当应用程序在单个线程上运行时,它会按预期工作。
最佳答案
如果有人发现此问题正在寻找问题的解决方案,可以通过设置 Redis 服务器并配置 socket.io 在 node.js 中使用它来解决此问题。
关于javascript - node.js : socket. 中的 socket.io 发出在 socket.disconnect 之前未完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16746109/