Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重用HTTP请求的通道_Java_Netty - Fatal编程技术网

Java 重用HTTP请求的通道

Java 重用HTTP请求的通道,java,netty,Java,Netty,我想为多个HTTP请求重用通道。我在服务器上使用java+netty,但是客户端可以用C#/java编写 对于C#client,我使用HttpWebRequest和KeepAlive=true并且我不会在响应到达后关闭通道。它工作得很好 但是当我尝试同样的java通信时,我遇到了一些问题。我正在处理来自服务器的响应,类似于示例和客户端部分 如果在If(msg instanceof LastHttpContent){部分中,我只做ctx.close();我将无法再次重用此频道。我应该在这里做什么才

我想为多个HTTP请求重用通道。我在服务器上使用java+netty,但是客户端可以用C#/java编写

对于C#client,我使用
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);