当前位置: 首页 > 面试题库 >

Netty与Apache MINA

翟修明
2023-03-14
问题内容

它们都提供大致相同的功能。我应该选择哪一个来开发我的高性能TCP服务器?优点和缺点是什么?

参考链接:

Apache MINA(源代码)

净资产(来源)


问题答案:

虽然MINA和Netty具有相同的抱负,但它们在实践中却大相径庭,因此您应该仔细考虑自己的选择。我们很幸运,因为我们在MINA方面拥有丰富的经验,并且有时间陪伴Netty。我们特别喜欢更简洁的API和更好的文档。在纸上的表现似乎也更好。更重要的是,我们知道Trustin
Lee将随时回答我们遇到的任何问题,他当然做到了。

我们发现Netty的一切变得更容易。期。在尝试重新实现与MINA相同的功能时,我们是从头开始的。通过遵循出色的文档和示例,我们最终以更少得多的代码获得了更多的功能。

Netty管道对我们来说更好。它比MINA更为简单,在MINA中,一切都是处理程序,由您决定是要处理上游事件,下游事件,还是同时处理更多低级事件。在“重放”解码器中吞噬字节几乎是一种乐趣。能够如此轻松地即时重新配置管道也非常好。

但是Netty的最吸引人的地方是恕我直言,它具有创建“覆盖一个”的管道处理程序的能力。您可能已经在文档中阅读了有关coverage注释的信息,但是从本质上讲,它使您可以在一行代码中给出状态。由于没有混乱,没有会话映射,同步和类似的东西,我们仅能够声明常规变量(例如“用户名”)并使用它们。

但是后来我们遇到了障碍。我们已经在MINA下拥有一个多协议服务器,其中我们的应用程序协议基于TCP /
IP,HTTP和UDP运行。当我们切换到Netty时,我们在几分钟内将SSL和HTTPS添加到了列表中!到目前为止,一切都还不错,但是当涉及到UDP时,我们意识到我们已经滑倒了。MINA对我们非常友好,因为我们可以将UDP视为“连接”协议。在Netty下,没有这样的抽象。UDP是无连接的,Netty将其视为无连接。与MINA相比,Netty在更低的级别上暴露了UDP的更多无连接性。在Netty下使用UDP可以做的事情比在MINA提供的更高层次的抽象下不能做的,但是我们依靠它。

添加“连接的UDP”包装器或其他东西并不是那么简单。鉴于时间限制,并且在Trustin的建议下,最好的方法是在Netty中实现我们自己的运输提供商,但这并不是很快,所以我们最终不得不放弃Netty。

因此,仔细研究它们之间的差异,并迅速进入一个阶段,您可以测试任何棘手的功能是否按预期工作。如果您对Netty会做的工作感到满意,那么我会毫不犹豫地在MINA上使用它。如果您要从MINA迁移到Netty,则同样适用,但是值得注意的是,这两个API确实有很大的不同,您应该考虑对Netty进行虚拟重写-
您不会后悔的!



 类似资料:
  • Netty是一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。 也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发

  • 在深入研究我的问题时,解释了atg gRpc在netty失败中使用SunPKCS11进行TLS客户端身份验证,我更改了netty-tcnative-boringssl的版本。我房子里的罐子。Gradle来自 到 导致: +---io.netty:netty-tcnative-boringssl-static:+->2.0.1.final 之所以这样做,是因为根据Netty的javadoc方法也适用

  • 问题内容: 我正在研究示例Netty HTTP客户端代码 ,以便在并发线程环境中发出http请求。 但是,我的系统以相当低的吞吐量完全崩溃(有很多异常)。 用几乎伪代码: 在示例中,为了发出请求,我创建了一个ClientBootstrap,然后从那里(通过几个箍)创建一个Channel以编写HTTPRequest。 这一切都很好,而且很好。 但是,在同时发生的情况下,是否每个请求都要经过相同的循环

  • 问题内容: 尽管我的业务逻辑没有问题,但事实证明我没有使用Netty 。更新要使用的测试代码后,我遇到了IllegalReferenceCountException的无尽循环。我承认对Netty还是陌生的,但这并不能证明在手动分配和释放资源的日子里回来。创建GC就是为了避免这种混乱。迪斯科,有人吗?那贝尔底呢? 我不断得到: 问题答案: 工作代码: 该代码可能更简洁一些,但是适用于Spring b

  • go-netty 是大量参考了netty的设计并融合Golang本身的协程特性而开发的一款高性能网络库 Feature (特性) 可扩展多种传输协议,并且默认实现了 TCP, KCP, Websocket 可扩展多种解码器,默认实现了常见的编解码器 基于责任链模型的流程控制 核心库零依赖 Documentation (文档) GoDoc Examples (示例) chat_server (基于w

  • 这是一个Socket.IO服务器端实现,基于netty框架,适合于 socket.io 0.9-1.0版本(虽然socket.io 目前还处于 0.9版本,会支持到1.0)