【发布时间】:2018-11-25 20:14:38
【问题描述】:
我需要通过同一个连接向一个休息服务器发送多个异步请求,并让它们以先进先出的顺序执行,我认为 HTTP 1.1 流水线非常适合这个。
我在Netty 上发现了一些相关问题,但我在他们的用户指南上找不到太多内容,在他们的测试用例上也没有。
Netty 是否支持 HTTP 1.1 管道?这将如何实施?
一个例子将不胜感激。
【问题讨论】:
标签: http netty http-1.1 http-pipelining
我需要通过同一个连接向一个休息服务器发送多个异步请求,并让它们以先进先出的顺序执行,我认为 HTTP 1.1 流水线非常适合这个。
我在Netty 上发现了一些相关问题,但我在他们的用户指南上找不到太多内容,在他们的测试用例上也没有。
Netty 是否支持 HTTP 1.1 管道?这将如何实施?
一个例子将不胜感激。
【问题讨论】:
标签: http netty http-1.1 http-pipelining
由于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 之类的解决方案,您基本上保留一个队列,这样您就知道在请求完成后要调用的正确回调。
【讨论】: