java BIO通信模型详解

客户端/服务器模型

Client/Server模型是网络编程的基本模型,服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接请求,通过三次握手建立连接,如果连接建立成功,双方就可以通过网络套接字(Socket)进行通信。

BIO通信模型图——请求/应答通信模型

java BIO通信模型详解_第1张图片

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

代码

服务端


java BIO通信模型详解_第2张图片
java BIO通信模型详解_第3张图片

客户端


java BIO通信模型详解_第4张图片

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

交互式服务端:


java BIO通信模型详解_第5张图片
java BIO通信模型详解_第6张图片

交互式客户端:


java BIO通信模型详解_第7张图片

运行结果:
客户端

java BIO通信模型详解_第8张图片

服务端

java BIO通信模型详解_第9张图片

问题

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

你可能感兴趣的:(java BIO通信模型详解)