【发布时间】:2017-11-12 19:20:58
【问题描述】:
我正在节点中编写一个应用程序,在该节点中我向远程服务发出许多 websocket 请求(使用ws library)。所以远程服务是服务器,我的节点应用程序是客户端。它工作得很好,但偶尔我会突然得到以下 TimeoutError 的长列表:
Unhandled rejection TimeoutError: ResourceRequest timed out
at ResourceRequest._fireTimeout (/Users/kramer65/repos/mmj/node_modules/generic-pool/lib/ResourceRequest.js:58:17)
at Timeout.bound (/Users/kramer65/repos/mmj/node_modules/generic-pool/lib/ResourceRequest.js:8:15)
at ontimeout (timers.js:386:11)
at tryOnTimeout (timers.js:250:5)
at Timer.listOnTimeout (timers.js:214:5)
由于我进行了许多不同的 websocket 调用,我现在想知道这个错误发生在哪个调用上。我尝试将ws.send() 包装在下面粘贴的 try/catch 中,但这似乎没有任何作用。
try {
ws.send(request_json);
} catch(e) {
console.log('WEBSOCKET ERROR', e);
console.log('WEBSOCKET JSON', request_json);
}
有人知道我如何捕捉 TimeoutError 并记录请求内容吗?欢迎所有提示!
[编辑] 正如@Mark_M 所建议的,我向 ws.send() 方法添加了一个回调,如下所示:
ws.send(JSON.stringify(request_obj)), (error)=>{
console.log('WEBSOCKET ERROR', request_obj.action, error);
});
不幸的是,我仍然遇到与我在此问题顶部发布的相同的错误。
[编辑2] 我也尝试了@wrangler 提出的建议:
ws.send(JSON.stringify(request_obj));
ws.onerror = function(event) {
console.log('WEBSOCKET ONERROR', request_obj.action, event);
};
ws.onclose = function (event){
console.log('WEBSOCKET ONCLOSE', request_obj.action, event);
};
但不幸的是,这似乎也不起作用。我仍然收到与我在此问题顶部发布的相同的错误。
还有其他想法吗?
【问题讨论】:
标签: node.js websocket timeout try-catch