node.js中的socket.io:socket.emit在socket.disconnect之前没有完成

时间:2013-05-25 03:31:19

标签: javascript node.js https websocket socket.io

我正在尝试将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事件,例如:

logout - 客户端应该停止尝试连接,直到用户登录

server reboot - 客户应该重新尝试连接,直到他们通过

我需要能够告诉客户端为什么客户端被服务器断开连接,至少有一些方法可以确保在调用socket.disconnect()之前发送了一条消息?

编辑:这看起来特定于node.js cluster代码 - 当应用程序在单个线程上运行时,它按预期工作。

1 个答案:

答案 0 :(得分:0)

通过设置Redis服务器并配置socket.io以在node.js中使用它来解决这个问题,如果有人发现这样找到解决问题的方法。