我需要通过相同的连接向休息服务器发送多个异步请求,并按FIFO顺序执行它们,我认为HTTP 1.1流水线操作是完美的。
我在Netty上发现了一些相关问题,但我在他们的用户指南上找不到太多内容而在测试用例中没有找到任何内容。
Netty是否支持HTTP 1.1流水线操作?如何实施?
非常感谢一个例子。
相关-unanswered-问题:HTTP 1.1 pipelining vs HTTP 2 multiplexing
答案 0 :(得分:3)
由于Netty离TCP层更近,而不是HTTP层,因此在设置管道后,只需编写它们就可以轻松发送多个请求。
HttpRequest request1 = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/");
request1.headers().set(HttpHeaderNames.HOST, host);
request1.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE);
request1.headers().set(HttpHeaderNames.ACCEPT_ENCODING, HttpHeaderValues.GZIP);
channel.writeAndFlush(request1);
HttpRequest request2 = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/");
request2.headers().set(HttpHeaderNames.HOST, host);
request2.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE);
request2.headers().set(HttpHeaderNames.ACCEPT_ENCODING, HttpHeaderValues.GZIP);
channel.writeAndFlush(request2);
然后在你的channelRead
方法中,按照发送它们的顺序阅读它们。
要正确管理数据包的队列,您可以使用this之类的解决方案,在此基本上保留队列,以便在请求完成后知道要调用的正确回调。