如何阻止管道上的写入以重新配置管道?

时间:2012-03-01 15:13:14

标签: concurrency netty

我正在编写一个经常需要更改发送/接收消息格式的服务器。当发生这种情况时,服务器应发送通知,告知所有未来的消息都具有新格式,并以旧格式读取所有消息,直到客户端发送他的确认。

我考虑保留对所有管道共享的解码器的引用,并根据需要从外部重新配置它。在这种情况下,我担心并发性。

  • 我怎样才能确保管道没有处理任何写入 我正在研究解码器?
  • 以及如何确定通知 是重新配置后处理的第一条消息吗?

我看到的另一种方法是通过管道发送“通知”对象(通过使用channel.write),捕获解码器中的对象,然后在转发通知消息时进行重新配置。在这种情况下,管道中不应该有任何并发​​。

  • 这样做会更好/最先进吗?

1 个答案:

答案 0 :(得分:0)

我决定使用第二种方式。 StateHandler捕获ConfigurationEvents重新配置管道。不幸的是,这意味着我不能确定所有通道使用相同的配置,因为重新配置和非常年轻的通道之间的竞争条件可能发生。但我很确定这在我的情况下无关紧要。