我收到以下错误:
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 调用。
请建议如何跟踪导致套接字挂起的原因以及它是在哪个请求/调用上。
谢谢
快速而肮脏的开发解决方案:
Use longjohn https://github.com/mattinsler/longjohn,您将获得包含异步操作的长堆栈跟踪。
干净且正确的解决方案:
从技术上讲,在节点中,每当你发出一个'error'事件并且没有人听它,它会抛出 http://nodejs.org/api/all.html#events_class-eventemitter。为了使其不抛出,请在其上放置一个侦听器并自己处理它。这样您就可以记录错误并提供更多信息。
要为一组调用设置一个侦听器,您可以使用domains http://nodejs.org/api/all.html#all_domain并在运行时捕获其他错误。确保与 http(Server/Client) 相关的每个异步操作位于不同的位置domain http://nodejs.org/api/all.html#all_domain与代码的其他部分相比,域将自动侦听error
事件并将其传播到它自己的处理程序。因此,您只需监听该处理程序并获取错误数据。您还可以免费获得更多信息。 http://nodejs.org/api/all.html#all_additions_to_error_objects(域名已弃用)。
As Mike
建议你也可以设置NODE_DEBUG=net
or use strace https://stackoverflow.com/q/174942/774086。它们都向您提供节点内部正在做什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)