几个小时后,带有高速公路的 Websocket 停止响应

Websocket with Autobahn stop responding after some hours

我对 Autobahn|JS 和 Poloniex.com 上的推送 API 有一个奇怪的问题。 我连接到他们的 API 以获取他们聊天中的所有消息,1-2 小时后,websocket 关闭且没有错误,无法帮助我进行调试。

我已经测试了 3 种语言的行为 (PHP、NodeJS 和 JS) 和 2 种语言有问题(PHP 和 NodeJS),我的 JavaScript 测试 运行 1 天以来没有问题。

代码很简单:

var connection = new autobahn.Connection({url: 'wss://api.poloniex.com', realm: 'realm1'});

connection.onopen = function (session) {
   function onevent(args) {
      console.log("Message:", args[3]);
   }
   session.subscribe('trollbox', onevent);
};

connection.open();

我已经用 Supervisor 测试了 NodeJS 和同样的问题,1-2 小时后,没有响应,没有错误,只是不再收到消息。

我是 websocket 的新手,所以我想我可以测试更多,但在 Javascript 中一切正常的事实让我感到困惑。

没有找到解决方案,所以我实施了正确的 "ping"。我每隔 X 分钟取消订阅一次(我的测试 运行 从 1 天开始,间隔 5 分钟)。不再断开连接,也不会错过来自 trollbox 的消息。

AUTOBAHN_DEBUG = true;

var autobahn = require('autobahn');

(function trollbox() {

  console.log("\n------------- OPEN CONNECTION ---------------\n");
  var connection = new autobahn.Connection({
    url: 'wss://api.poloniex.com',
    realm: 'realm1',
    max_retries: -1
  });

  connection.onopen = function (session) {
    function onevent (args) {

      // Do somethings...
      console.log(args[3]);
    }
    session.subscribe('trollbox', onevent);

    setTimeout(function () {
      console.log("\n------------- CLOSING CONNECTION ---------------\n");
      connection.close();
    }, 300000);

  };

  connection.open();

  setTimeout(trollbox, 300200);
})();

因此 trollbox 现在无法正常工作,您断开连接的原因是由于不活动。

如果你想查看它,你可以在这里查看网站源代码 here 并查看第 2440 行,看到 trollbox 订阅已被注释。