2012-03-01 45 views
0

我正在寫一個服務器,經常需要更改發送/接收消息的格式。當發生這種情況時,服務器應該發送一個通知,告知所有將來的消息都具有新的格式,並讀取以舊格式接收的所有消息,直到客戶端發送他的確認。我怎樣才能阻止寫入管道重新配置管道?

我想過要保持對所有管道共享的解碼器的引用,並根據需要從外部重新配置它。在這種情況下,我擔心併發。

  • 我怎樣才能確保沒有寫入由管道而 我工作的解碼器處理?
  • 以及如何確保通知 是重新配置後處理的第一條消息?

的唯一的其他方式我看到的是通過管道輸送到發送一個「通知」對象(通過使用channel.write),抓在解碼器中的對象,並執行重新配置,然後同時轉發所述通知消息。在這種情況下,管道中不應該有任何併發​​。

  • 這會是更好/最先進的方式來做到這一點?

回答

0

我決定用第二種方法。 StateHandler捕獲ConfigurationEvents重新配置管道。不幸的是,這意味着我不能確定所有通道都使用相同的配置,因爲重新配置和非常年輕的通道之間的競爭條件可能會發生。但我很確定這對我而言並不重要。