Гарантировано ли, что изменения ChannelPipeline будут иметь немедленный эффект, если они сделаны из потока, не связанногJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Гарантировано ли, что изменения ChannelPipeline будут иметь немедленный эффект, если они сделаны из потока, не связанног

Сообщение Anonymous »


Я запускаю 2 экземпляра Channel на одном компьютере: первый из них отправляет на второй, и наоборот.

Затем я делаю следующее:

channel2.pipeline().addAfter(OutboundEncoder.NAME, OutgoingAcknowledgementSilencer.NAME, ackSilencer); канал1.writeAndFlush(сообщение); Этот код выполняется в потоке main (то есть, конечно, не в потоке Netty).

В большинстве случаев это работает так, как я ожидаю: когда приходит сообщение, отправленное во второй строке, принимающий конвейер (из channel2) ведет себя так, как если бы у него был этот Добавлен ackSilencer. Но очень редко я наблюдаю, чтобы конвейер channel2 не вызывал обработчик, добавленный в строке 1.

Javadoc ChannelPipeline по адресу https://netty.io/4.0/api/io/netty/chann ... eline.html говорит следующее:

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

Но есть ли гарантия, что такая вставка будет иметь немедленный эффект, если она будет выполнена из другого потока (не потока цикла событий)?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»