文章目录
  1. C/S模型
  2. P2P模型

C/S模型

服务器启动后,首先创建一个或多个监听socket,并调用bind函数将其绑定到服务器感兴趣的端口,再调用listen函数等待客户连接。

服务器稳定运行之后,客户端就可以调用connect函数向服务器发起连接;而客户连接请求是随机到达的异步事件,需要某种I/O模型来监听这一事件。

服务器使用的是I/O复用技术之一select系统调用。当监听到连接请求后,服务器调用accept函数接收它,并分配一个逻辑单元为新的连接服务。逻辑单元可以是新创建的子进程、子线程或其他。

逻辑单元读取客户请求,处理该请求,然后将处理结果返回给客户端。客户端收到请求之后,可以继续发送请求,也可以关闭连接。

如下图是TCP服务器与TCP客户端的一般工作流程。

 

P2P模型

P2P模型使每台主机在消耗服务的同时也给别的主机提供服务。为了使主机之间便于发现,实际使用的P2P模型通常带有一个专门的发现服务器。