在服务器上,每次建立新连接时都会调用ChannelPipelineFactory#getPipeline()。我的服务器的ChannelHandlers有分配序列化缓冲区和其他不是线程安全的对象。我如何避免为每个连接分配它们?我的应用程序具有大量短暂连接,这对性能有影响。我没有在处理程序中存储每个连接状态,我真正需要的是仅为将使用管道的线程分配一次,因为处理程序中的对象不是线程安全的。
可能我可以使用带有单个处理程序的管道。当收到任何事件时,我会从ThreadLocal获取实际处理程序的引用。这样,我每个线程服务连接只分配一个实际处理程序。不过,这意味着每个事件都需要进行ThreadLocal查找。
是否有其他更好的解决方案?
我认为在相对简单的示例代码中,Netty管道看起来很棒,并且在适合问题(例如HTTP处理)时非常整洁,但是对于许多其他情况来说,它并不是非常灵活。这里有其他人对此的看法。使用单个处理程序来构建自己的“管道”似乎完全可行,这并不是什么灾难,但我想知道我是否做错了?