【问题标题】:Understanding Disconnect / Reconnect Process and Error Messages了解断开/重新连接过程和错误消息
【发布时间】:2013-08-21 13:02:13
【问题描述】:

我正在尝试实现一个功能,通知用户与推送器断开连接,并指示何时发生重新连接。我的第一个实验只是将更改的推送器状态记录到控制台:

var pusher = new Pusher('MY_ACCOUNT_STRING');
pusher.connection.bind('state_change', function(states) {
  console.log(states.current);
});

然后我刷新页面,连接到 pusher,禁用我的互联网连接,等待 pusher 检测到断开连接,重新启用我的互联网连接,然后等待 pusher 检测到。下面是处理过程中chrome的控制台输出截图(click here for a larger version):

这是我的问题:

  1. 在推杆检测到断开连接之前,需要一分钟,甚至可能是 2-3 分钟。有没有办法减少该时间,以便推送器在 10 秒左右内检测到断开连接?
  2. 为什么我会看到这些红色错误,它们究竟是什么意思?这正常吗?我认为通过正确的设置可以处理错误,因为断开连接事件是推送器上下文中的“预期”异常。
  3. 什么是 1006 错误,为什么我会看到该错误?

感谢您的帮助!

编辑:

我一直在观察一个长期连接的输出,我也看到过很多次,想知道它的原因,以及我如何捕获它并处理它?

disconnected login.js:146
connecting login.js:146
Pusher : Error : {"type":"WebSocketError","error":{"type":"PusherError","data":{"code":1007,"message":"Server heartbeat missed"}}} pusher.min.js:12
connected 

【问题讨论】:

    标签: pusher


    【解决方案1】:

    这不是正常的行为。你有没有机会在不同的机器和网络上检查这个?看起来是网络问题。

    问题 1。

    当我禁用 wifi 时,推送器需要 4 秒才能注意到并将状态更改为 disconnected,然后更改为 unavailable

    当我重新启用 wifi 时,我只会遇到与 http://js.pusher.com/2.1.3/sockjs.js 相同的错误

    我不知道这样做的影响.. 但您可以尝试更改默认超时:

    var pusher = new Pusher('MY_ACCOUNT_STRING',  {
        pong_timeout: 6000, //default = 30000
        unavailable_timeout: 2000 //default = 10000
    });
    

    问题 2。

    不知道,我认为 lib 不应该抛出这些错误

    问题 3。

    错误来自 WebSocket 协议:https://www.rfc-editor.org/rfc/rfc6455

      1006 is a reserved value and MUST NOT be set as a status code in a
      Close control frame by an endpoint.  It is designated for use in
      applications expecting a status code to indicate that the
      connection was closed abnormally, e.g., without sending or
      receiving a Close control frame.
    
      1007 indicates that an endpoint is terminating the connection
      because it has received data within a message that was not
      consistent with the type of the message (e.g., non-UTF-8 [RFC3629]
      data within a text message).
    

    【讨论】:

    • 我最终通过电子邮件发送了推送支持,他们基本上说这是正常行为,除了更改乒乓超时,我无能为力。
    • 嗯,他们有没有关于物有所值的建议?或者只是你必须尝试一下?您是否设法在不同的网络或机器上进行了尝试?
    • 是的,它似乎在某些地方比其他地方效果更好。基本上他们说如果本地浏览器套接字检测工作正常,它几乎会立即检测到。但即使在新浏览器上,它也不是 100% 可靠的。他们似乎不知道为什么以及在什么情况下它会失败。因此,如果您需要安全起见,您可以将您的乒乓球降到每 10 秒一次,但不建议这样做,因为这会给他们的服务器带来压力,而且我认为 iirc 也会产生误报。底线似乎是底层技术并非万无一失。
    猜你喜欢
    • 1970-01-01
    • 2019-08-08
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 2014-11-21
    • 2017-04-14
    • 1970-01-01
    相关资源
    最近更新 更多