【发布时间】:2015-12-03 08:51:44
【问题描述】:
我为使用 Socket.IO 的 iOS 编写应用程序。有时我的服务器 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 for Android
- 当我只使用 web 客户端(是的,使用 socket.IO)时,脚本可以正常工作
- 当我使用 iOS 应用程序时,脚本开始下降。
- 崩溃并非总是发生,也不会立即发生。脚本在连接后 5-10 分钟后下降,可能会崩溃,但也可能不会。
所以,我认为问题出在 socket.io 的服务器库中,但只有在 iOS 客户端连接时才会触发异常。
我该如何处理这个异常?
更新
我的 node.js-server 上的 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');
});
【问题讨论】:
-
您是否尝试在 events.js:85 处处理错误?
-
@Dyrk,我该怎么做?我什至找不到 events.js。似乎是 node.js 系统脚本
-
如果您的服务器端脚本发出该错误,那么您必须在服务器端执行某种客户端连接(例如 HTTP 请求或纯 TCP 客户端连接)。当您尝试连接到另一台服务器并且该服务器未及时响应时,会发生此错误。
-
@user2627744 是的,是的。那么你想如何在不访问服务器的情况下修复它的代码呢?你在 Node 中有一些未处理的错误,所以首先最好看看 events.js 文件中发生了什么。
-
@mscdex,似乎是真的。我在服务器上使用 OAuth 令牌检查。