Java 重用HTTP请求的通道
我想为多个HTTP请求重用通道。我在服务器上使用java+netty,但是客户端可以用C#/java编写 对于C#client,我使用Java 重用HTTP请求的通道,java,netty,Java,Netty,我想为多个HTTP请求重用通道。我在服务器上使用java+netty,但是客户端可以用C#/java编写 对于C#client,我使用HttpWebRequest和KeepAlive=true并且我不会在响应到达后关闭通道。它工作得很好 但是当我尝试同样的java通信时,我遇到了一些问题。我正在处理来自服务器的响应,类似于示例和客户端部分 如果在If(msg instanceof LastHttpContent){部分中,我只做ctx.close();我将无法再次重用此频道。我应该在这里做什么才
HttpWebRequest
和KeepAlive=true代码>并且我不会在响应到达后关闭通道。它工作得很好
但是当我尝试同样的java通信时,我遇到了一些问题。我正在处理来自服务器的响应,类似于示例和客户端部分
如果在If(msg instanceof LastHttpContent){
部分中,我只做ctx.close();
我将无法再次重用此频道。我应该在这里做什么才能重用它
我试过:
ctx.write(new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.CONTINUE));
或
或者尝试什么都不做…但当我尝试重用此通道时,此句柄出现问题。第一个请求处理得很好,但第二个请求给了我以下错误:
channelRead0: DefaultHttpResponse(decodeResult: failure(java.lang.NullPointerException), version: HTTP/1.1)
部分if(msg instanceof HttpResponse)
工作正常(我的意思是读取了头),但在之后的某个地方抛出异常
以及:
这也没什么帮助。要说清楚:第一个请求/响应是可以的。同一个流中的第二个请求是可以的,但是在解码响应时有一个问题
我检查了Logger。第一个和第二个响应是相等的,所以我不明白为什么解码时会出现NullException
p、 s.netty 4.0.26您完全受客户端的支配。如果客户端实现连接池,您的连接将被重新使用。如果不实现,则不会。在服务器端,除了观察和实现连接:如果发送,请关闭标题之外,您无法执行任何操作。客户端是我自己编写的,我曾尝试重新使用连接。正如我所说的,问题在于解码第二个请求的响应。所以,通道并没有关闭。在这里,他们在句柄响应之后关闭通道,但没有关闭(我希望保持活动状态)它不起作用。您可以添加1)NullPointerException的堆栈跟踪和2)您发送到服务器的HTTP请求吗?@trustin没有堆栈跟踪,只有一条来自slf4j的消息。这就是问题所在。。。
channelRead0: DefaultHttpResponse(decodeResult: failure(java.lang.NullPointerException), version: HTTP/1.1)
headers().set(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.KEEP_ALIVE);