1/基于多进程并发的面发连接服务器软件的设计(TCP)
(1) 不固定进程数的并发模型设计流程
步骤1.主进程利用Socket创建主套接字server_socket并绑定到熟知的端口号。
步骤2.主进程调用accept()函数在熟知的端口号上等待客户端的连接。
步骤3.当有客户端请求到达是,主进程建立与该客户之间的通信连接,这是accept()返回一个用于该连接的从套接字new_socket.
步骤4.主进程创建一个新的从进程来处理该连接。
步骤5.主进程关闭套接字new_socket(此时,由于从进程中仍然打开着从套接字,故主进程的关闭操作仅仅只是把从套接字new_socket的引用计数减1,而不是真正关闭该从套接字)。
步骤6.主进程返回步骤2(继续等待客户端的连接)。
步骤7.从进程关闭主套接字server_socket,(此时,由于主进程中仍然打开着主套接字,故主进程的关闭操作仅仅只是把从套接字server_socket的引用计数减1,而不是真正关闭该主套接字)。
步骤8.从进程调用recv()和send()等操作与客户端进行数据交换。
步骤9.数据交互结束,从进程关闭从套接字new_socket.从进程结束。
(2)固定进程数的并发模型设计
1/父进程的设计流程
步骤1.主进程创建主套接字server_socket并绑定到熟知端口。
步骤2.主进程创建给定数目的从进程。
步骤3.主进程调用wait()或者waitpid()等待从进程结束,一旦有从进程退出,则主进程立马创建一个新的从进程,以保证从进程在数量上维持不变。
2/从进程的设计流程
步骤1.从进程调用accept()等待客户端的连接。
步骤2.当有客户端请求连接到达时,从进程维持与该客户端的通信连接,同时accept()调用返回一个新的从套接字new_socket.
步骤3.从进程调用recv()和send()等操作与客户端进行数据交互。
步骤4.数据交互结束,从进程关闭从套接字new_socket.
步骤5.返回步骤1.