我需要通过同一个连接向休息服务器发送多个异步请求,并让它们以 FIFO 顺序执行,我认为 HTTP 1.1 流水线非常适合这个。
我在Netty上发现了一些相关问题,但我在他们的用户指南上找不到太多,在他们的测试用例上也没有。
Netty 是否支持 HTTP 1.1 流水线?那将如何实施?
一个例子将不胜感激。
相关的未回答问题:HTTP 1.1 流水线与 HTTP 2 多路复用
我需要通过同一个连接向休息服务器发送多个异步请求,并让它们以 FIFO 顺序执行,我认为 HTTP 1.1 流水线非常适合这个。
我在Netty上发现了一些相关问题,但我在他们的用户指南上找不到太多,在他们的测试用例上也没有。
Netty 是否支持 HTTP 1.1 流水线?那将如何实施?
一个例子将不胜感激。
相关的未回答问题:HTTP 1.1 流水线与 HTTP 2 多路复用
由于 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
的方法中,按照您发送它们的相同顺序阅读它们。
要正确管理数据包的队列,您可以使用这样的解决方案,您基本上保留一个队列,因此您知道在请求完成后要调用的正确回调。