它们都提供大致相同的功能。我应该选择哪一款来开发我的高性能 TCP 服务器?有什么优点和缺点?
参考链接:
阿帕奇米娜 (source)
Netty (source)
虽然 MINA 和 Netty 有着相似的目标,但它们在实践中却有很大不同,您应该仔细考虑您的选择。我们很幸运,因为我们有很多使用 MINA 的经验,并且有时间和 Netty 一起玩。我们特别喜欢更简洁的 API 和更好的文档。纸面上的表现似乎也更好。更重要的是,我们知道 Trustin Lee 会随时回答我们的任何问题,他确实做到了。
我们发现 Netty 一切都变得更容易。时期。当我们试图重新实现 MINA 上已有的相同功能时,我们是从头开始的。通过遵循优秀的文档和示例,我们最终以更少的代码获得了更多的功能。
Netty Pipeline 对我们来说效果更好。它在某种程度上比 MINA 更简单,在 MINA 中,一切都是处理程序,由您决定是处理上游事件、下游事件还是消耗更多低级内容。在“重放”解码器中吞噬字节几乎是一种乐趣。能够如此轻松地即时重新配置管道也非常好。
但恕我直言,Netty 的明星吸引力在于能够创建具有“覆盖范围”的管道处理程序。您可能已经在文档中阅读过有关此覆盖注释的信息,但本质上它在一行代码中为您提供了状态。没有混乱,没有会话映射,同步和类似的东西,我们只需声明常规变量(例如“用户名”)并使用它们。
但后来我们遇到了障碍。我们已经在 MINA 下有了一个多协议服务器,其中我们的应用程序协议运行在 TCP/IP、HTTP 和 UDP 上。当我们切换到 Netty 时,我们在几分钟内将 SSL 和 HTTPS 添加到列表中!到目前为止一切顺利,但当涉及到 UDP 时,我们意识到我们犯了错误。 MINA 对我们非常好,因为我们可以将 UDP 视为“连接”协议。在 Netty 下没有这样的抽象。 UDP 是无连接的,Netty 也是如此对待它。 Netty 在比 MINA 更低的级别上暴露了更多 UDP 的无连接特性。在 Netty 下使用 UDP 可以做一些事情,而在 MINA 提供的更高级别抽象下却无法做到这一点,但我们却依赖于此。
添加一个“连接的UDP”包装器什么的并不是那么简单。鉴于时间限制,并且根据 Trustin 的建议,最好的方法是在 Netty 中实现我们自己的传输提供商,但这不会很快,我们最终不得不放弃 Netty。
因此,请仔细研究它们之间的差异,并快速进入可以测试任何棘手功能是否按预期工作的阶段。如果您对 Netty 能够完成这项工作感到满意,那么我会毫不犹豫地选择它而不是 MINA。如果您从 MINA 迁移到 Netty,则同样适用,但值得注意的是,这两个 API 确实有显着不同,您应该考虑对 Netty 进行虚拟重写 - 您不会后悔的!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)