java BIO通信模型详解
2017-07-03 本文已影响22人
每天学点编程
客户端/服务器模型
Client/Server模型是网络编程的基本模型,服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接请求,通过三次握手建立连接,如果连接建立成功,双方就可以通过网络套接字(Socket)进行通信。
BIO通信模型图——请求/应答通信模型

该模型缺乏弹性伸缩能力,服务端线程个数与客户端并发访问数呈1:1的正比关系,随着线程数的不断膨胀,系统性能将急剧下降,最终会导致线程堆栈溢出、创建新线程失败等——进程宕机或者僵死,不能对外提供服务。
代码
服务端


客户端

上面的代码是服务器被动响应客户端。
交互式服务端:


交互式客户端:

运行结果:
客户端

服务端

问题
BIO的问题在于每当有一个新请求接入时,服务端必须创建一个新的线程处理新接入的链路,一个线程只能处理一个客户端连接(如果要做成像QQ那样的话,还需要两个线程)。在高性能服务器应用领域,往往需要面向成千上万个客户端的并发连接,这种模型显然无法满足高性能、高并发接入的场景。