非线程安全的Room在什么情况下可以存在

Room可以是非线程安全的,只要将它相关的所有Channel都注册到同一个EventLoop即可。因为在一个EventLoop中永远是单线程运行的,所以就不必担心并发问题。

如果Netty不支持切换EventLoop(我目前还不知道可不可以切换),那么这个工作移动到协商的过程中。协商好了,大家链接到同一个逻辑服的时候,并且这些Channel注册到同一个EventLoop中(这个应该可以通过开发针对ServerChannel的ChannelHandler实现)。

这样的技术方案是没有考虑Disruptor的,因为Disruptor会带来新的线程组。如果一个Room中的事件需要在disruptorThreadGroup中进行处理,则其又需要考虑线程安全的问题。

Disruptor的引入到底有没有必要,取决是Room中操作的逻辑会不会很复杂,如果复杂的话,则运行时间就会比较长,可能在Disruptor中运行会更好一点,否则的话,可以考虑不使用Disruptor。

(如果是我,我前期可能不会引入Disruptor,而是通过Netty原生的东西实现一些功能,这样会更简单一些。)

2021-08-21-17-27-14