Нетти 4: Как отправить тот же экземпляр DefaultFullHttpResponse без получения исключения IllegalReferenceCountException - PullRequest
0 голосов
/ 14 февраля 2019

Я пишу фиктивный сервер, используя netty 4. Вы можете дать фиктивному серверу DefaultFullHttpResponse, который должен возвращаться каждый раз, когда указанный запрос совпадает.

Это прекрасно работает, если ответ отправляется не более 2 раз, когда он отправляется в третий раз, когда выдается IllegalReferenceCountException.Как я понимаю, DefaultFullHttpResponse имеет свой собственный ByteBuf (содержимое http).Поэтому при отправке ответа счетчик ссылок уменьшается.Эта логика не в моей руке, как это делается с помощью HttpCodec.

Мой вопрос: как я могу использовать один и тот же DefaultFullHttpResponse несколько раз?Мне нужно retain() содержимое при отправке, это так?Это не проблема, если все ответы DefaultFullHttpResponse, но макет-сервер является общим и позволяет использовать другие протоколы и кодеки.

1 Ответ

0 голосов
/ 19 февраля 2019

Если ответное сообщение реализует ByteBufHolder, как DefaultFullHttpResponse, его ByteBuf может быть дублирован.

if (resp is ByteBufHolder) {
    resp = resp.duplicate() //duplicates the byte buffer of the original message
    resp.retain()
    resp.touch()
}
...