Nat*_*teS 5 java pipeline netty
在服务器上,每个新连接都会调用 ChannelPipelineFactory#getPipeline() 。我的服务器的 ChannelHandler 分配了序列化缓冲区和其他非线程安全的对象。如何避免为每个连接分配它们?我的应用程序有大量的短期连接,这会损害性能。我不在处理程序中存储每个连接状态,我实际上只需要为每个将使用管道的线程分配一次它们,因为处理程序中的对象不是线程安全的。
也许我可以使用带有单个处理程序的管道。当收到任何事件时,我将从 ThreadLocal 获取对实际处理程序的引用。这样,我只为每个服务连接的线程分配一次实际的处理程序。但这确实意味着 ThreadLocal 会查找每个事件。
还有其他可能更好的解决方案吗?
我的印象是,Netty 管道在相对简单的示例代码中看起来很棒,并且在很好地适合问题(例如 HTTP 处理)时非常整洁,但对于许多其他场景来说它不是很灵活。这是其他人的想法。这不是任何灾难,因为使用单个处理程序来滚动你自己的“管道”似乎完全可行,但我想知道我是否做错了?
如果这对您来说足够的话,使用 ThreadLocal 似乎是一个好主意。请注意,这仅适用于上游事件,因为下游事件可能由任何线程触发,因此 ThreadLocal 的东西可能不会那么好。
| 归档时间: |
|
| 查看次数: |
1356 次 |
| 最近记录: |