我正在编写一个经常需要更改发送/接收消息格式的服务器。当发生这种情况时,服务器应发送通知,告知所有未来的消息都具有新格式,并以旧格式读取所有消息,直到客户端发送他的确认。
我考虑保留对所有管道共享的解码器的引用,并根据需要从外部重新配置它。在这种情况下,我担心并发性。
我看到的另一种方法是通过管道发送“通知”对象(通过使用channel.write),捕获解码器中的对象,然后在转发通知消息时进行重新配置。在这种情况下,管道中不应该有任何并发。
答案 0 :(得分:0)
我决定使用第二种方式。 StateHandler捕获ConfigurationEvents重新配置管道。不幸的是,这意味着我不能确定所有通道使用相同的配置,因为重新配置和非常年轻的通道之间的竞争条件可能发生。但我很确定这在我的情况下无关紧要。