2013-02-20 1 views
2

Это, вероятно, просто, но я не мог понять это. Мой HTTP-сервер, основанный на Netty 4, заставляет HTTP-клиенты зависеть от ответа. Ему удается отправить свою полезную нагрузку ответа (как это наблюдается с помощью curl в качестве клиента), но клиенты, похоже, не понимают, что ответ завершен, и они бесконечно ждут завершения. Наблюдается использование завитка, а также firefox и chrome.Ответы сетевого сервера Netty

Только если я изменю код, чтобы закрыть канал (channel.close, как показано на рисунке ниже), то клиенты подтверждают, что ответ выполнен. В противном случае они просто продолжают ждать завершения. Я хочу, чтобы канал оставался открытым, так что следующий запрос клиента не потребует открытия нового соединения (я хочу иметь постоянное поведение), поэтому закрытие канала не представляется правдоподобным. Поэтому я не уверен, как сервер должен отмечать ответ как завершающий - без закрытия соединения.

Серверный код:

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) 
    } 
}) 

Что мне не хватает ??

+0

Вы отправляете заголовок Content-Length? – Kylar

+0

Не совсем, я не активно добавляю заголовки. Нужно ли мне? – matanster

+1

Да. Без заголовка Content-Length ваш клиент не знает, когда прекратить чтение. Если ваш контент просто «привет», добавьте: Content-Length: 5. – Kylar

ответ

2

Вам нужен заголовок Content-Length, иначе клиент не будет знать, когда прекратить чтение, и будет постоянно опросить больше данных.

 Смежные вопросы

  • Нет связанных вопросов^_^