【问题标题】:Web socket error close codes specific to browser特定于浏览器的 Web 套接字错误关闭代码
【发布时间】:2013-05-20 11:47:26
【问题描述】:

我在我的应用程序中使用 Websockets 进行流式传输。 为此,我在后端使用 Jetty

关于 onclose 回调方法我有这个

@Override
    public void onClose(int arg0, String arg1) {
        logger.info("In onClose :: " + arg0 + " :: " + arg1);
}

我观察到的是,错误代码不是通用的,而是特定于浏览器的

当我使用 chrome 时,它​​会显示 1006,如果使用 ctrl+w 关闭浏览器,点击十字按钮,甚至用户点击注销按钮

但在 Firefox 中,如果使用 ctrl+w 关闭浏览器、单击 Cross Button 或什至用户单击注销按钮,则会显示 1001

现在的问题是我真的无法确定为什么会发生断开连接,因为它是特定于浏览器的??

请分享您对在这种情况下如何调试的看法??

【问题讨论】:

    标签: websocket jetty


    【解决方案1】:

    这可能会有所帮助:

    https://www.rfc-editor.org/rfc/rfc6455#section-7.4.1

    具体来说:

    1001 表示某个端点正在“离开”,例如服务器 关闭或浏览器已离开页面。>

    1006 是保留值,不得将其设置为状态码 通过端点关闭控制框。它被指定用于 应用程序需要状态码来指示连接 异常关闭,例如,没有发送或接收关闭 控制框架。

    所以我猜你是从服务器的角度来看这个问题,在这种情况下,1006 表示 chrome 端点表现不佳,服务器使用特殊的关闭代码对此作出反应。在您的客户端,我将开始对其进行调试,以确保它成为将 1001 的实际关闭代码返回服务器所需的任何关闭代码。现在您可能无法在所有场景中关闭逻辑,这就是为什么首先存在此关闭代码的原因,但您至少应该能够通过自己的注销按钮干净地关闭连接。

    【讨论】:

    • 当用户单击注销按钮时,我是否应该在任何浏览器上获取代码为 1000 而不是 1001,如果我错了,请纠正我。
    • 将取决于该注销按钮发生了什么,我怀疑某些 javascript 框架正在代表您工作。如果您 all 没有得到 1000,那么我会在 hinky 客户端说些什么。
    • 关闭代码 1000 是供您发布的代码。任何 javascript 框架都不应该自动为您发出 close 1000。 Firefox 发送 1001 是对苛刻的选项卡/浏览器关闭的明智响应。 chrome 不发送关闭,而是依赖服务器端 EOF 检测和随后的异常(不干净)关闭代码 1006 也是对您的用例的理智反应。
    猜你喜欢
    • 1970-01-01
    • 2018-02-08
    • 2013-04-07
    • 1970-01-01
    • 2013-05-25
    • 2020-01-31
    • 2018-02-07
    • 1970-01-01
    相关资源
    最近更新 更多