【问题标题】:netty-socketio: client did not complete upgrade - closing transportnetty-socketio:客户端未完成升级 - 关闭传输
【发布时间】:2016-02-11 01:36:10
【问题描述】:

我有一个使用 netty-socketio 运行的套接字服务器和一个使用 socket.io-client JS 库连接到它的 Web 应用程序。

问题是我失去了一些连接(不是全部,比如说 20%)。

对于丢失的连接:客户端建立连接后,服务器立即记录client did not complete upgrade - closing transport并断开客户端连接。

这发生在我的生产服务器(使用 nginx 作为代理)和我的本地环境(直接连接到 netty-socketio 服务器)上。它几乎是随机的,我无法识别它的模式。例如,如果我在浏览器上不断刷新客户端应用程序(以 5 秒为间隔),则在某些时候会发生此错误,并且对于随后的尝试,它将再次正常工作(直到再次发生)。

这是 netty-socketio 库中的错误:https://github.com/mrniko/netty-socketio/blob/master/src/main/java/com/corundumstudio/socketio/transport/WebSocketTransport.java#L196 但我无法弄清楚为什么它会随机发生(有时在第一次尝试时)

对此的任何想法都非常感谢。

谢谢

【问题讨论】:

    标签: javascript java http socket.io netty


    【解决方案1】:

    经过一番研究和测试发现,当使用netty-socketio作为服务器时,需要在客户端指定传输方式。

    var socket = io('server-address', { transports: [ 'polling' ] });
    // or
    var socket = io('server-address', { transports: [ 'websocket' ] });
    

    如果不指定,连接会使用轮询作为传输方式建立,netty会自动尝试升级到websocket。这就是导致连接失败的原因。

    在指定传输方法后,到目前为止我的连接失败率为 0%。

    【讨论】:

    • 你是救生员。在这上面花了大约 2 个小时,你一直都有魔法尘埃。
    猜你喜欢
    • 2016-03-20
    • 2021-05-26
    • 2013-05-13
    • 2015-09-20
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2016-01-13
    相关资源
    最近更新 更多