【问题标题】:websocket close error handlingwebsocket关闭错误处理
【发布时间】:2016-01-11 07:23:51
【问题描述】:

在客户端和服务器之间建立 Web 套接字连接时,连接可能会因以下几个原因而意外关闭:

  1. TCP 通道不活动。
  2. 导致连接关闭的服务器问题。
  3. 客户端崩溃或重新加载/刷新。

我正在寻找处理此类情况的方法,或者至少知道它们发生了。

在阅读有关 WebSocket close 的信息时,我了解到 WebSocket 协议支持服务器发起的 pings pongs 可用于服务器了解客户端是否崩溃。 (不支持客户端发起的乒乓球)。 - 这是处理客户端崩溃的最佳方法吗?

另外,我在规范中看到,在客户端我们可以监听 onClose 事件,并且有几个代码可以理解为什么连接已关闭 - 当服务器崩溃时,总是调用 onClose 事件?

【问题讨论】:

    标签: sockets error-handling websocket


    【解决方案1】:

    服务器和客户端都可以发送 ping,但是 Javascript API 中没有发送此类控制帧的方法。

    一种常见的方法是定期从服务器向客户端发送协议级别的 ping。如果服务器在给定时间内没有得到一个 pong 帧,则服务器断开客户端的连接。

    但是,客户端还应该知道服务器是否无法访问或连接是半开的,因此拥有应用程序级别的 ping/pong(即:表示 ping 或 pong 的一些用户数据)将允许服务器和客户端确定是否另一端再也无法到达。和以前一样,服务器可以在给定时间内发送 ping 并期待 pong,但客户端也可以期待在给定时间内收到 ping 或认为自己已断开连接,然后尝试重新连接。

    关于关闭原因,值得一看:getting the reason why websockets closed

    如果服务器崩溃并且连接保持半开状态,您将不得不自己检测这种情况并在 WebSocket 对象上调用.close(),然后将调用onclose 事件。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多