在网络程序里面,通常都是一个服务器处理多个客户机,为了出个多个客户机的请求,服务器端的程序有不同的处理方式。目前最常用的服务器模型:
1. 循环服务器:循环服务器在同一时刻只能响应一个客户端的请求。
2. 并发服务器:并发服务器在同一时刻可以响应多个客户端的请求。
- /* 循环服务器模型 TCP */
- socket();
- bind();
- listen();
- while(1) {
- accept();
- while(1) {
- recv();
- process();
- send();
- }
- close();
- }
- /* 循环服务器模型 UDP */
- socket();
- bind();
- while(1) {
- recvfrom();
- process();
- sendto();
- }
- /* 并发服务器模型 多进程 以TCP为例 */
- socket();
- bind();
- listen();
- while(1) {
- accept();
- if(fork()==0) { //创建子进程
- while(1) { recv(); process(); send(); }
- close();
- exit();
- }
- close();
- }
- /* 并发服务器模型 I/O多路复用 以TCP为例 */
- 初始化(socket->bind->listen);
- while(1) {
- 设置监听读写文件描述符集合 (FD_*);
- select();
- if(监听套接字就绪) { //说明有新的连接请求
- 建立连接(accept);
- 加入到监听文件描述符集合;
- }
- else { //说明是已连接的描述符
- 进程操作(send或者recv);
- }
- }