Netty одновременно изменяет переданные ChannelBuffers - PullRequest
2 голосов
/ 30 ноября 2011

В Netty кто-нибудь знает, будет ли ChannelBuffer, переданный в обработчик для события восходящего потока (после того, как вы приведете его из ChannelEvent / или MessageEvent), будет одновременно записываться в инфраструктуру Netty во время его обработки?

В руководстве пользователя и примерах явно не поясняется, произойдет ли это или нет.

Например, представьте метод ниже в классе, который расширяет SimpleChannelHandler и связан как обработчик на сервере netty:

@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
{
  ChannelBuffer buffer = (ChannelBuffer) e.getMessage();

  if (buffer.readableBytes() == 4)
  {
    // Is it possible for the number of readable bytes to increase here?
  }
}

В вышеупомянутом методе возможно ли увеличение количества читаемых байтов в закомментированной строке (при условии, что клиент все еще отправляет данные), или эти кадры гарантированно будут отдельными сообщениями и не будут записаны впредоставленный буфер?

Причина, по которой я спрашиваю, состоит в том, чтобы узнать, должен ли я скопировать буфер в локальный, прежде чем выполнять какую-либо часть моей обработки, или такая копия является излишней.

1 Ответ

4 голосов
/ 01 декабря 2011

Как только Netty создает ChannelBuffer и запускает с ним MessageEvent, он становится не в руках Netty, и поэтому Netty не изменяет его никакими средствами. Обработчики или другой пользовательский код могут изменять буфер, но обычно хорошо написанные обработчики не мешают другим обработчикам. Если плохой обработчик сохраняет ссылку на полученный буфер и изменяет его позже, то вы увидите состояние поврежденного буфера.

...