想好用哪个版本的BIO?NIO?AIO

96 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第16天,点击查看活动详情

前言

  • 虽然net t y很强,但是jdk的通信也还是需要的,毕竟使用场景不同,如果你的场景客户端很少,或者客户端与服务端之间的通信频率很少,在活着就一个客户端,那么BIO 是很好的选择,因为他开发特别简单。

抉择

  • Java 中的传统 I/O API 为不同的传输类型提供了不同的类型和方法。就比如说,Socket 和 DatagramSocket 纯粹就是两种结构,完全没有进行抽象,这里不像JDK的作风啊。
  • 给我开发者带来的影响就是需要针对每种类型单独开发。当需要支持额外的传输时,传输之间缺乏可移植性就会成为一个问题,之前我们项目中就遇到这个问题,国内开发者不讲伍德没办法只能重新开发,因为这通常需要重写应用程序的网络层。
  • 从逻辑上讲,许多协议可以在不止一种传输上运行,例如 TCP/IP、UDP/IP、SCTP 和串行端口通信。更糟糕的是,Java 的新 I/O (NIO) API 引入了与旧的阻塞 I/ O (OIO) API,并将在下一个版本 NIO.2 (AIO) 中继续这样做。因为所有这些 API 在设计和性能特征上都各不相同,所以您经常被迫在开始实施阶段之前确定您的应用程序将依赖哪个 API。

image.png

不同场景不同对待

  • 例如,您可能想从 OIO 开始,因为您要服务的客户端将非常小,使用 OIO 编写套接字服务器比使用 NIO 容易得多。但是,当您的业务呈指数级增长并且您的服务器需要同时为数万个客户端提供服务时,您就会遇到麻烦。您可以从 NIO 开始,但由于 NIO Selector API 的复杂性,这样做可能会大大增加开发时间,从而阻碍快速开发。