如何在NodeJS中debugging套接字挂断错误?
我收到以下错误:
events.js:48 throw arguments[1]; // Unhandled 'error' event ^ Error: socket hang up at createHangUpError (http.js:1091:15) at Socket.onend (http.js:1154:27) at TCP.onread (net.js:363:26)
在节点v0.6.6中,我的代码有多个http.request和.get调用。 请build议如何跟踪什么导致套接字挂起,以及在哪个请求/调用它。 谢谢
快速和肮脏的发展解决scheme :
使用longjohn ,会得到包含asynchronous操作的长堆栈跟踪。
清理和正确的解决scheme :从技术上讲,在节点中,每当你发出一个'error'
事件,没有人听,它就会抛出 。 为了让它不扔,把一个听众,并自己处理。 这样你可以logging更多的信息的错误。
要为一组调用设置一个监听器,您可以使用域并在运行时捕获其他错误。 确保与http(服务器/客户端)相关的每个asynchronous操作与代码的其他部分处于不同的域环境中,域将自动侦听 error
事件并将其传播到它自己的处理程序。所以你只能听那个处理程序并获取错误数据。 您也可以免费获得更多信息。 (域名被取消)
正如Mike
build议你也可以设置NODE_DEBUG=net
或使用strace 。 他们都提供给你内部的节点。
此外,您可以将NODE_DEBUG
环境variables设置为net
以获取有关所有套接字在做什么的信息。 这样你可以隔离哪个远程资源重置连接。
除了ftft1885的回答
http.get(url, function(res) { var bodyChunks = []; res.on('data', function(chunk) { // Store data chunks in an array bodyChunks.push(chunk); }).on('error', function(e) { // Call callback function with the error object which comes from the response callback(e, null); }).on('end', function() { // Call callback function with the concatenated chunks parsed as a JSON object (for example) callback(null, JSON.parse(Buffer.concat(bodyChunks))); }); }).on('error', function(e) { // Call callback function with the error object which comes from the request callback(e, null); });
当我有这个“套接字挂断”的错误,这是因为我没有赶上请求错误。
使用
req.on('error',function(err){})
在所有的http.ServerResponse对象结束之前,很可能你的服务器套接字连接被closures了。 确保您在对传入连接进行一些操作之前已经停止了所有传入的请求(传入连接与传入的HTTP请求不同)。