【问题标题】:How can i block writes on a pipeline for reconfiguration of the pipeline?如何阻止管道上的写入以重新配置管道?
【发布时间】:2012-03-20 02:14:36
【问题描述】:

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

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

  • 我怎样才能确保没有写入由管道处理,而 我在做解码器?
  • 以及如何确保通知 重新配置后是否处理了第一条消息?

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

  • 这会是更好/最先进的方法吗?

【问题讨论】:

    标签: concurrency netty


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      相关资源
      最近更新 更多