node.js 中的异常 ETIMEDOUT
Exception ETIMEDOUT in node.js
我为 iOS 编写应用程序,它使用 Socket.IO。有时我的服务器 JS 脚本会出现此错误:
events.js:85
throw er; // Unhandled 'error' event
^
Error: connect ETIMEDOUT
at exports._errnoException (util.js:746:11)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:983:19)
我知道的是:
- 当我只使用 Android 的应用程序时,脚本工作正常。该应用使用 Socket.IO 作为 Android
- 当我只使用网络客户端时脚本工作正常(是的,使用 socket.IO)
- 当我使用 iOS 应用程序时,脚本开始下降。
- 崩溃并不总是发生,也不会立即发生。脚本在连接后 5-10 分钟后崩溃,可能会崩溃,但也可能不会。
所以,我认为问题出在 socket.io 的服务器库中,但仅当 iOS-客户端连接时才会触发异常。
如何处理这个异常?
更新
我的 node.js 服务器上的 OAuth 模块出现问题,该模块尝试检查应用程序令牌但超时到 vk.com
我通过为 "https.get" 函数添加 "on" 事件,在我的 node.js 服务器中编辑了 vkapi 模块:
是:
https.get(options, function(res) {
var apiResponse = new String();
res.setEncoding('utf8');
res.on('data', function(chunk) {
apiResponse += chunk;
});
res.on('end', function() {
var o = JSON.parse(apiResponse);
if (o.error) { self.emit('appServerTokenNotReady', o);
} else {
self.token = o.access_token;
self.emit('appServerTokenReady');
}
});
});
现在:
https.get(options, function(res) {
var apiResponse = new String();
res.setEncoding('utf8');
res.on('data', function(chunk) {
apiResponse += chunk;
});
res.on('end', function() {
var o = JSON.parse(apiResponse);
if (o.error) { self.emit('appServerTokenNotReady', o);
} else {
self.token = o.access_token;
self.emit('appServerTokenReady');
}
});
}).on('error', function(e) {
console.log('HTTPS error');
});
通常,您可以通过侦听任何对象(例如请求、连接等)上的 error
事件来处理这些类型的异步错误。
error
事件的特殊之处在于,如果在发出时当前没有事件处理程序,则会抛出错误。
我为 iOS 编写应用程序,它使用 Socket.IO。有时我的服务器 JS 脚本会出现此错误:
events.js:85
throw er; // Unhandled 'error' event
^
Error: connect ETIMEDOUT
at exports._errnoException (util.js:746:11)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:983:19)
我知道的是:
- 当我只使用 Android 的应用程序时,脚本工作正常。该应用使用 Socket.IO 作为 Android
- 当我只使用网络客户端时脚本工作正常(是的,使用 socket.IO)
- 当我使用 iOS 应用程序时,脚本开始下降。
- 崩溃并不总是发生,也不会立即发生。脚本在连接后 5-10 分钟后崩溃,可能会崩溃,但也可能不会。
所以,我认为问题出在 socket.io 的服务器库中,但仅当 iOS-客户端连接时才会触发异常。
如何处理这个异常?
更新
我的 node.js 服务器上的 OAuth 模块出现问题,该模块尝试检查应用程序令牌但超时到 vk.com 我通过为 "https.get" 函数添加 "on" 事件,在我的 node.js 服务器中编辑了 vkapi 模块: 是:
https.get(options, function(res) {
var apiResponse = new String();
res.setEncoding('utf8');
res.on('data', function(chunk) {
apiResponse += chunk;
});
res.on('end', function() {
var o = JSON.parse(apiResponse);
if (o.error) { self.emit('appServerTokenNotReady', o);
} else {
self.token = o.access_token;
self.emit('appServerTokenReady');
}
});
});
现在:
https.get(options, function(res) {
var apiResponse = new String();
res.setEncoding('utf8');
res.on('data', function(chunk) {
apiResponse += chunk;
});
res.on('end', function() {
var o = JSON.parse(apiResponse);
if (o.error) { self.emit('appServerTokenNotReady', o);
} else {
self.token = o.access_token;
self.emit('appServerTokenReady');
}
});
}).on('error', function(e) {
console.log('HTTPS error');
});
通常,您可以通过侦听任何对象(例如请求、连接等)上的 error
事件来处理这些类型的异步错误。
error
事件的特殊之处在于,如果在发出时当前没有事件处理程序,则会抛出错误。