2012-04-12 2 views
0

В модели сервера-клиента на основе TCP, использующей Netty Channels, существует ли какое-либо соответствие между количеством Channel.write() с сервера и соответствующим Channel.messageReceived() на принимающем клиенте? Если я делаю 10 writes() на отправителя, значит ли это, что messageReceived() будет вызываться 10 раз на слушающем клиенте? или Netty может агрегировать отправленные данные (от write() s от отправителя) до более или менее числа messageReceived() событий на клиенте? Есть ли способ настроить это поведение в Netty?Сообщение Channel.messageReceived в Netty

ответ

1

Не гарантируется, что у вас есть сопоставление 1: 1 для ваших вызовов Channel.write (..) и messageReceived. Вам нужно использовать некоторый подкадр FrameDecoder (возможно, написать свой собственный), который будет буферизовать ChannelBuffer, пока вы не получите достаточно данных, чтобы отправить ваше сообщение следующим ChannelHandlers в ChannelPipeline на сервере.

Netty уже поставляется с некоторыми готовыми к использованию реализациями FrameDecoder, такими как, например, DelimiterBasedFrameDecoder, который будет буферизовать данные до тех пор, пока не получит разделитель, а затем отправит их следующим обработчикам в ChannelPipeline.

См. [1] для получения более подробной информации.

[1] http://netty.io/docs/stable/api/org/jboss/netty/handler/codec/frame/FrameDecoder.html

0

Да, есть способ сделать это, но вам нужно будет дать нам больше, чтобы сделать что-нибудь еще.

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