Нейти одновременно изменяет пропущенные каналы

StackOverflow https://stackoverflow.com/questions/8331677

  •  26-10-2019
  •  | 
  •  

Вопрос

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

Руководство пользователя и примеры явно не разъясняют, произойдет ли это или нет.

Например, представьте себе метод ниже в классе, который расширяет 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?
  }
}

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

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

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top