Netty-socketio:客户端未完成升级 - 关闭传输

netty-socketio: client did not complete upgrade - closing transport

本文关键字:传输 客户端 未完成 Netty-socketio      更新时间:2023-09-26

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

问题是我失去了一些连接(不是全部,假设 20%(。

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

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

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

对此

的任何想法都非常感谢。

谢谢

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

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

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

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