cyc*_*ist 3 javascript node.js express socket.io
我正在尝试应用它,以便我的服务器将告诉客户端何时关闭.我不明白为什么服务器不会发出.似乎程序在它有机会发出之前关闭,但是console.log()可以工作.我认为我的问题可能与process的同步特性有关.正如这里提到的那样,但老实说,我对于(a)同步在这种情况下的实际意义并不了解.此外,如果有帮助,我在Windows 7上.
// catch ctrl+c event and exit normally
process.on('SIGINT', function (code) {
io.emit("chat message", "Server CLOSED");
console.log("Server CLOSED");
process.exit(2);
});
Run Code Online (Sandbox Code Playgroud)
我今天刚开始搞乱这些东西,请原谅我的无知.任何帮助是极大的赞赏!
io.emit() 是一个异步操作(你可以说它在后台运行)并且由于各种TCP优化(可能是诸如Nagle的算法),你的数据可能不会立即发送.
process.exit() 立即生效.
在成功发送消息并通过TCP确认之前,您可能会关闭应用程序,从而关闭其拥有的所有资源.
一种可能的解决方法是process.exit(2)稍微延迟,使TCP堆栈有机会在关闭之前发送数据.
另一种可能性是避免上次聊天消息.客户端很快就会看到与服务器的连接已关闭,并且无法重新连接,因此无论如何都应该为用户显示该信息(在服务器崩溃的情况下).
您还可以考虑关闭Nagle算法,该算法在发送数据之前会尝试等待一小段时间,以防您立即发送一些可以合并到同一个数据包中的数据.但是,要知道这是否可靠地工作,你必须在适当的平台上进行相当彻底的测试,甚至关闭它也可能无法解决问题,因为它是TCP堆栈之间的竞争,以发送其缓冲数据并关闭此进程拥有的所有资源(包括打开的套接字).
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |