【问题标题】:Mystery TCP error in node TLS client节点 TLS 客户端中的神秘 TCP 错误
【发布时间】:2015-08-06 15:15:51
【问题描述】:

我有几个节点 tcp 客户端和一个连接到外部服务器的 tls 客户端:

    var socket = net.connect(args.connect.ip_port, args.connect.host);
    socket.setTimeout(this.timeout);
    socket.on('connect', this.socketOnConnect.bind(this));
    socket.on('error', this.socketOnError.bind(this));
    socket.on('timeout', this.socketOnTimeout.bind(this));

    this.clearStream = tls.connect(
        args.connect.ip_port,
        args.connect.url,
        {},
        this.onSecureConnect.bind(this)
    );
    this.clearStream.on('error', this.clearStreamOnError.bind(this));
    this.clearStream.on('end', this.clearStreamOnEnd.bind(this));

这两个服务器间歇性地发出未处理的错误:

(err): events.js:72
 (err):         throw er; // Unhandled 'error' event
 (err):               ^
 (err): Error: read ECONNRESET
 (err):     at errnoException (net.js:904:11)
 (err):     at TCP.onread (net.js:558:19)
 (err): events.js:72
 (err):         throw er; // Unhandled 'error' event
 (err):               ^
 (err): Error: read ECONNRESET
 (err):     at errnoException (net.js:904:11)
 (err):     at TCP.onread (net.js:558:19)

我认为 on(' 错误处理程序应该处理这些错误,但显然不是。我错过了什么?

我想我可以使用域来包装连接调用,但我宁愿在这样做之前了解正在发生的事情。

【问题讨论】:

    标签: node.js node.js-stream node.js-client


    【解决方案1】:

    我还没有发现为什么错误会从 on(' 错误处理程序中溜走,但我已经将可疑函数包装在域中,并在域错误处理程序中进行回溯,这至少使问题易于管理.

    下面的示例代码供任何可能感兴趣的人使用。

        var self = this;
        var domain1 = domain.create();
    
        domain1.on('error', function (err) {
            log.error(util.format('Domain error in tls client: %s.  Exiting.', err.message));
            log.error(traceback.replace(/(?:\r\n|\r|\n)/g, '<br />'));
            self.cleanExit();
        });
    
        domain1.run(function () {
            self.clearStream = tls.connect(
                args.connect.ip_port,
                args.connect.url,
                {},
                self.onSecureConnect.bind(self)
            );
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2021-12-12
      相关资源
      最近更新 更多