网上很多拿bio和nio对比通信协议快慢的,然后说nio有多快;凡是这么说的都是对协议的连接环境和需求不明确和不理解的。我先问个问题,http只是短链接么,get请求真的不能携带数据么?我很负责的告诉你http可以长连接,get请求也可以携带数据;只是http模式就是短链接,因为它是单通设计(单工),get请求的数据被协商报文规则忽略而已,就是socket的封装(我写底层时依然可以放开get携带数据请求)。
回正题
bio模式处理http短链接并不合适,相当于拿水杯喝水不放下,新的水杯自然拿不起来了(实际上是拿起后喝完放下)。bio适合长连接双通(双工)的通讯模式;类似语音通话,双方随时说随时听。一个人拿不过来就派更多人拿,相当于分布式部署进行负载均衡,长连接本身就是高并发的模式;因为它没断过,节省代码进行反复的初始化过程。
nio适合短链接,单通(单工),我处理完就关闭,不需要一直挂载占用带宽,因为挂载着我也收不到你的消息。没有意义,那有人说我配置高,就喜欢浪费资源,我佩服你的豪横。短链接的特性就是发送一个请求的消息,发过去就可以了(不会有消息返回的过程);有新请求在发就可以了,不需要等待对方的消息。
所以无论是bio的设计模式和nio的设计模式都有其价值和意义,我们需要做的就是在特定的场景下使用合适的设计模式。