【问题标题】:Exception ETIMEDOUT in node.jsnode.js 中的异常 ETIMEDOUT
【发布时间】: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 令牌检查。

标签: ios node.js socket.io


【解决方案1】:

通常,您可以通过侦听任何(例如请求、连接等)对象上的 error 事件来处理这些类型的异步错误。

error 事件的特殊之处在于,如果在发出它时当前没有事件处理程序,则会抛出错误。

【讨论】:

  • 为什么在不提供更多上下文的情况下这样做?如果您使用的是 iOS 应用程序,并且错误返回给 iOS,应用程序可能会在看起来像是客户端错误的上下文中显示服务器错误(即客户端与 node.js 的连接在超时时受到影响。)?
猜你喜欢
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 2014-08-10
  • 2013-02-04
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多