java.net 与java.nio

2022-09-03 06:17:20

在什么时候从 java.net 切换到java.nio更好?.net(不是Microsoft实体)更容易理解和熟悉,而nio是可扩展的,并且带有一些额外的漂亮功能。

具体来说,我需要针对这种情况做出选择:我们有一个控制中心在多个远程站点管理硬件(每个站点都有一台计算机管理多个硬件单元(收发器,TNC和旋转器))。我的想法是在每台机器上编写一个服务器应用程序,作为从控制中心到无线电硬件的网关,每个单元都有一个插座。根据我的理解,NIO意味着一台服务器,许多客户端,但我想到的是一个客户端,许多服务器。

我想第三种选择是使用MINA,但我不确定这是否在一个简单的问题上投入了太多。


每个远程服务器将有多达 8 个连接,全部来自同一个客户端(用于控制所有硬件和单独的 TX/RX 插槽)。但是,单个客户端希望同时连接到多个服务器。与其将每个服务器放在不同的端口上,是否可以在客户端使用通道选择器,还是在客户端使用多线程io并以不同的方式配置服务器更好?


实际上,由于远程机器仅用于与其他硬件进行交互,那么RMI或IDL / CORBA会是更好的解决方案吗?真的,我只是希望能够从硬件发送命令和接收遥测数据,而不必制定一些应用层协议来做到这一点。


答案 1

避免NIO,除非你有充分的理由使用它。这并不好玩,可能不像你想象的那么有益。一旦您处理了数以万计的连接,您可能会获得更好的可伸缩性,但是在较低的数字下,您可能会通过阻止IO获得更好的吞吐量。不过,与往常一样,在做出你可能会后悔的事情之前,先做自己的测量。

另一个需要考虑的是,如果你想使用SSL,NIO会让它变得非常痛苦。


答案 2

可伸缩性可能会驱动您对软件包的选择。java.net 每个套接字需要一个线程。编码它将大大容易。java.nio的效率要高得多,但编码起来可能会很麻烦。

我会问自己,你希望处理多少个连接。如果它相对较少(例如,<100),我会选择 java.net。


推荐