没有指定升级时,在WebSocketServerProtocolHandler之后继续管道?

时间:2015-02-10 11:39:13

标签: websocket netty

我在根路径上有WebSocketServerProtocolHandler处理程序,我也接受常规的HTTP请求。但是,WebSocketServerProtocolHandler不会让我使用我的HTTP请求,因为它假定所有内容都是Web套接字并响应:

not a WebSocket handshake request: missing upgrade

在不需要升级到Web套接字时,我可以在WebSocketServerProtocolHandler之后继续执行管道吗?换句话说,我需要HTTP和WebSockets在同一地址上运行。

是的,我可以复制/粘贴并自己做WebSocketServerProtocolHandler,但有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

WebSocketServerProtocolHander的javadoc引用了io.netty.example.http.websocketx.html5.WebSocketServer示例。然而,这里发生的事情可能并不完全明显。

如果你看一下WebSocketServerInitializer的源代码,你可以看到它默认设置了一个相当标准的HTTP管道。这是因为,如您所知,升级请求是HTTP请求。魔术发生在WebSocketServerHandler的handleHttpRequest方法中。它落到第96行并假设它是升级请求(您可能想要实际检查)。它创建一个WebSocketServerHandshaker并启动握手。诀窍在于它会自动重新配置管道以处理Web套接字流量,因此您不必这样做。看看WebSocketServerHandshaker中的握手方法,看看发生了什么。