有人可以帮我吗?
我正在编写客户端-服务器应用程序。服务器和客户端通过 websocket 连接。服务器管道:
ChannelPipeline pipeline = pipeline();
pipeline.addLast("decoder", new HttpRequestDecoder());
pipeline.addLast("aggregator", new HttpChunkAggregator(65536));
pipeline.addLast("encoder", new HttpResponseEncoder());
pipeline.addLast("handler", new WebSocketServerHandler());
客户端管道:
final WebSocketClientHandshaker handshaker =
new WebSocketClientHandshakerFactory().newHandshaker(
uri, WebSocketVersion.V13, null, false, customHeaders);
pipeline.addLast("decoder", new HttpResponseDecoder());
pipeline.addLast("encoder", new HttpRequestEncoder());
pipeline.addLast("ws-handler", new WebSocketClientHandler(handshaker));
这个应用程序的工作方式类似于代理 - 服务器从外部获取httprequest,然后通过websockets将其发送到客户端。客户端接收它并将其发送到修改后的指定 url,接收响应并通过 websocket 将其发送回服务器。服务器接收此响应并将数据写入请求它的通道。
现在的主要问题 - 将HttpRequest转换为WebSocketFrame并返回的最佳方法是什么?目前的想法是读取字符串中的HttpRequest,然后将其作为TextWebSocketFrame发送。在这种情况下,我想我需要替换当前为服务器和客户端指定的标准解码器,以便不要进行双重对话。我在 Netty 中没有找到这样的解码器。
但也许这是糟糕的方式,还有更多好的决定吗?非常感谢您的回答!我是新来的。
此致敬意
如果您打算封装整个HTTP请求,那么我认为您通过BinaryWebSocketFrame发送它是正确的。