2015-02-10 49 views
0

我在根路徑上有WebSocketServerProtocolHandler處理程序,我也接受常規的HTTP請求。然而,WebSocketServerProtocolHandler不會讓我用我的HTTP請求,因爲它假定一切都是網絡插座,並回應:當沒有指定升級時,在WebSocketServerProtocolHandler之後繼續管道?

not a WebSocket handshake request: missing upgrade 

我可以簡單地繼續流水線的執行WebSocketServerProtocolHandler後,在不需要升級到網絡插座?換句話說,我需要HTTP和WebSockets在相同的地址上運行。

是的,我可能會複製/粘貼並做我自己的WebSocketServerProtocolHandler,但有沒有更好的方法?

回答

1

WebSocketServerProtocolHander的javadoc引用了您的io.netty.example.http.websocketx.html5.WebSocketServer示例。然而,這裏可能並不完全明顯。

如果你看看WebSocketServerInitializer的源代碼,你可以看到它默認設置了一個相當標準的HTTP管道。這是因爲,如您所知,升級請求是一個HTTP請求。這個魔術發生在WebSocketServerHandler的handleHttpRequest方法中。它貫穿到第96行,並假定它是一個升級請求(你可能想要實際檢查)。它創建一個WebSocketServerHandshaker並開始握手。訣竅是它會自動重新配置管道以處理Web套接字流量,因此您不必這樣做。看看WebSocketServerHandshaker中的握手方法,看看發生了什麼。

+0

在Netty 4.0.35([commit](https://github.com/netty/netty/commit/2e6544fc0e2581f96652be02d86e777e8e0493bc))中,行爲發生了顯着變化 - 此後,WebSocketServerProtocolHandler僅爲websocket路徑啓動握手所有路徑)。請務必查看示例代碼的相應修訂版。 – 2016-10-04 23:21:46

相關問題