Error handling node.js中不可修补的错误

Error handling node.js中不可修补的错误,error-handling,tcp,node.js,Error Handling,Tcp,Node.js,因此,我试图编写一个简单的TCP套接字服务器,将信息广播到所有连接的客户端。因此,当用户连接时,他们会被添加到客户端列表中,当流发出关闭事件时,他们会从客户端列表中删除 这很有效,只是有时候我在用户断开连接时发送消息 我尝试在try/catch块中包装stream.write(),但没有成功。错误似乎不可修补。解决方案是为流的“错误”事件添加一个侦听器。起初,这似乎违反直觉,但其理由是合理的 stream.write()异步发送数据。当该节点意识到写入套接字会引发错误时,您的代码已经移动,超过了

因此,我试图编写一个简单的TCP套接字服务器,将信息广播到所有连接的客户端。因此,当用户连接时,他们会被添加到客户端列表中,当流发出关闭事件时,他们会从客户端列表中删除

这很有效,只是有时候我在用户断开连接时发送消息


我尝试在
try/catch
块中包装
stream.write()
,但没有成功。错误似乎不可修补。

解决方案是为流的“错误”事件添加一个侦听器。起初,这似乎违反直觉,但其理由是合理的

stream.write()异步发送数据。当该节点意识到写入套接字会引发错误时,您的代码已经移动,超过了对stream.write的调用,因此无法在那里引发错误

相反,节点在这种情况下所做的是从流中发出一个“错误”事件,并且对EventEmitter进行编码,以便在没有“错误”事件的侦听器的情况下,将错误作为顶级异常引发,并且进程结束。

Peter说得很对

还有另一种方法,您也可以使用

process.on('uncaughtException',function(error){
// process error
})
这将捕获所有抛出的内容

如果可能的话,通常最好采用peter的方法,但是如果您在编写测试框架时,使用
process.on('uncaughtException',…

这里有一个要点,涵盖了(我认为)nodejs中处理错误的所有不同方法

我对来自的时间服务器示例也有同样的问题 我的客户端被杀死,然后时间服务器尝试写入关闭的套接字

设置错误处理程序不起作用,因为错误事件仅在接收时触发。时间服务器不接收(请参阅流事件文档)

我的解决方案是在流关闭事件上设置一个处理程序

stream.on('close', function() {
    subscribers.remove(stream);
    stream.end();
    console.log('Subscriber CLOSE: ' + subscribers.length + " total.\n");
}); 

回答得很好!这里我还有一个问题:错误处理程序(侦听器)通常应该做什么:只记录错误或同时调用
next
callback?