gpt4 book ai didi

http - Netty http 服务器响应

转载 作者:可可西里 更新时间:2023-11-01 16:18:36 28 4
gpt4 key购买 nike

这可能很简单,但我想不通。我基于 Netty 4 的 http 服务器导致 http 客户端挂起其响应。它设法通过其响应有效负载发送(如使用 curl 作为客户端所观察到的那样),但客户端似乎没有意识到响应已经完成并且他们无限期地等待它完成。使用 curl 以及 firefox 和 chrome 进行观察。

仅当我修改代码以关闭 channel (channel.close,如下内联所示)时,客户端才会确认响应已完成。否则,他们只是继续等待它完成。我希望 channel 保持打开状态,以便下一个客户端请求不需要打开新连接(我希望保持事件状态),因此关闭 channel 似乎不太合理。所以我不确定服务器应该如何在不关闭连接的情况下将响应标记为结束。

服务器代码:

val response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK)
val buf = new StringBuilder
buf.append("hello")
response.data.writeBytes(Unpooled.copiedBuffer(buf, CharsetUtil.UTF_8))
ctx.write(response).addListener(new ChannelFutureListener(){
def operationComplete(channelFuture: ChannelFuture){
if (channelFuture.isSuccess){
println("server write finished successfully")
//channelFuture.channel.close <===== if uncommented, clients receive the response, otherwise they just keep waiting forever
}
else
println ("server write failed: " + channelFuture.cause + "\n" + channelFuture.cause.getStackTraceString)
}
})

我错过了什么??

最佳答案

您需要一个 Content-Length header ,否则客户端将不知道何时停止阅读,并会不断轮询以获取更多数据。

关于http - Netty http 服务器响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14982461/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com