0

我需要通过同一个连接向休息服务器发送多个异步请求,并让它们以 FIFO 顺序执行,我认为 HTTP 1.1 流水线非常适合这个。

我在Netty上发现了一些相关问题,但我在他们的用户指南上找不到太多,在他们的测试用例上也没有。

Netty 是否支持 HTTP 1.1 流水线?那将如何实施?

一个例子将不胜感激。

相关的未回答问题:HTTP 1.1 流水线与 HTTP 2 多路复用

4

1 回答 1

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的方法中,按照您发送它们的相同顺序阅读它们。

要正确管理数据包的队列,您可以使用这样的解决方案您基本上保留一个队列,因此您知道在请求完成后要调用的正确回调。

于 2018-06-17T10:32:11.993 回答