文档介绍:踏雪无痕
【Linux的高级应用编程】网络编程中并发服务器的设计模式
分类: C++ Linux 2011-11-25 17:00 337人阅读评论(1) 收藏举报
 
 网络编程中并发服务器的设计模式
Sailor_forever sailing_9806@ 转载请注明
http://blog./sailor_8318/archive/2008/12/30/
 
并发服务器有三种设计模式:
多进程:每个进程服务一个客户端。优势是有各自独立的地址空间,可靠性高,但进程调度开销大,无法资源共
享,进程间通信机制复杂。
多线程:每个线程服务一个客户端。优势是开销小,通信机制简单,可共享内存。但共享地址空间,可靠性低,一
个服务器出现问题时可能导致系统崩溃,同时全局共享可能带来竞争,共享资源需要互斥,对编程要求高。
单进程:占有的进程及线程资源少,通信机制简单。但监听服务器及各个子服务器揉和在一起,程序结构复杂不清
晰,编程麻烦。
 
 
1 // File: mult-pr-tcp-
2
3 /*
4
5 多进程并发服务器。该程序等候客户连接,一旦连接则显示客户的地址,
6
7 接着接收该客户的名字并显示。然后接收来自该客户的信息(字符串)。
8 每当收到一个字符串,则显示该字符串,并将字符串反转,再将反转的字
9
10 符发回客户。之后,继续等待接收该客户的信息直至该客户关闭连接。服
11
12 务器具有同时处理多客户的能力。
13
14 */
15
16 #include <>          /* These are the usual header files */
17
18 #include <>          /* for bzero() */
19
20 #include <>         /* for close() */
21 #include <sys/>
22
23 #include <sys/>
24
25 #include </>
26
#include <arpa/>
 
#define PORT 1234   /* Port that will be opened */
#define BACKLOG 2   /* Number of allowed connections */
#define MAXDATASIZE 1000 
void process_cli(int connectfd, struct sockaddr_in client);
 
1
main()
{
        int listenfd, connectfd; /* socket descriptors */
        pid_t pid;
        struct sockaddr_in server; /* server's address information */
        struct sockaddr_in client; /* client's address information */
        int sin_size;
 
        /* Create TCP socket  */
        if ((listenfd = socket(, SOCK_STREAM, 0)) == -1) {
           /* handle exception */
           perror("Creating socket failed.");
           exit(1);
           }
 
        int opt = SO_REUSEADDR;
        setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt,
sizeof(opt));
 
        bzero(&server,sizeof(server));
        =;
        =htons(PORT);