我有一个运行netty-socketio的套接字服务器和一个使用socket.io-client 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 但我无法弄清楚为什么它会随机发生(有些时候是第一次尝试)
对此的任何想法都非常感激。
由于
答案 0 :(得分:4)
经过一些研究和测试后,我发现当使用netty-socketio作为服务器时,需要在客户端指定传输方法。
var socket = io('server-address', { transports: [ 'polling' ] });
// or
var socket = io('server-address', { transports: [ 'websocket' ] });
如果您没有指定它,将使用轮询作为传输方法建立连接,netty将自动尝试将其升级到websocket。这就是导致连接失败的原因。
在指定传输方法后,到目前为止我有0%的连接失败。