- 2
- 0
- 约 15页
- 2016-03-07 发布于湖北
- 举报
1. 介绍
在上一节,我们介绍了Linux简单的并发服务器,通过在服务器端建立多个子进程,来接收客户端的请求,实现并发处理,但这种方式明显有缺陷,服务器并不知道客户端请求的数量,所以事先建立的进程数不好确定。所以,这里介绍三种高级并发服务器模式。第一种是服务器端统一accept,接收客户端的到来,然后为每个客户端分配一个进程去处理. 第二种是统一accept接收请求,然后为每个客户端分配一个线程去处理。第三种建立多个线程去处理客户端请求,每个线程独自监听客户端的请求。显然,第一种方案解决了简单服务器的并发问题。第二种方案其实是对第一种方案的改进,因为线程切换的开销明显要小于进程切换的开销。第三种方案就是原来用进程去处理每个请求,现在换成用线程去处理,个人认为改进不是很大.
2. 高级并发服务器算法流程
(1)统一accept,多进程
? socket(...);
? bind(...);
? listen(...);
? while(1){
? accept(...);
? fork(...);//子进程
?}
?close(...);//关闭服务器套接字
子进程:
?recv(...);
?process(...);
?send(...);
?close(...);//关闭客户端
(2)统一accept,多线程
? socket(...);
? bind(...);
? listen(...);
? while(1){
? accept(...);
? pthread_create(....);?
?}
close(...);//关闭服务器
线程1:
recv(....);
process(....);
send(...);
close(...);//关闭客户端
(3)accept放入每个线程
?socket(...);
?bind(...);
?listen(...);
pthread_create(...);
pthread_join(...);//等待线程结束
close(...);//关闭服务器
线程1:
Mutex_lock//互斥锁
accept(...);
Mutex_unlock(...);
recv(...);
process(...);
send(...);
close(...);//客户端
3. 相关例子
TCP服务器:
(1)统一accept多进程
服务器;
#include stdio.h#include string.h#include stdlib.h#include sys/socket.h#include sys/types.h#include netinet/in.h#include time.h/**高级并发服务器TCP统一accept当有客户端到来时,为每个客户端建立进程,然后每个进程处理客户端的请求,动态的建立进程**/#define PORT 8888#define BUFFERSIZE 1024#define BACKLOG 2static void handle(int sc){//处理客户端的请求? char buffer[BUFFERSIZE];? time_t now;? int size;? memset(buffer,0,BUFFERSIZE);?? size=recv(sc,buffer,BUFFERSIZE,0);? if(size0!strncmp(buffer,TIME,4)){//时间服务器,当客户端请求时间就把时间发送给客户端????? memset(buffer,0,BUFFERSIZE);????? now=time(NULL);????? sprintf(buffer,%24s\r\n,ctime(now));???? send(sc,buffer,strlen(buffer),0);}?close(sc);}int main(int argc,char*argv[]){? int ret;? int s;? int sc;//用于服务器与客户端进行数据传输的套接字? struct sockaddr_in server_addr;? struct sockaddr_in client_addr;? int len;? len=sizeof(client_addr);? //建立流式套接字? s=socket(AF_INET,SOCK_STREAM,0);? if(s0){??? perror(socket error);?? return -1;? }?//将地址结构绑定到套接字描述符上去?memset(server_addr,0,sizeof(serve
您可能关注的文档
- linux+Shell+programming解读.ppt
- Linux01-Linux的起源解读.ppt
- LinuxFTP服务安博教育解读.ppt
- linuxshell编程解读.ppt
- Linuxshell解读.ppt
- linux安装解读.ppt
- Linux操作系统案例教程电子教案外存管理技工学校使用解读.ppt
- Linux操作系统教学简案解读.doc
- linux操作系统解读.ppt
- Linux操作系统考试题库解读.doc
- 2025年全国演出经纪人员资格认定考试试卷带答案(研优卷).docx
- 2025年全国演出经纪人员资格认定考试试卷完整版.docx
- 2025年全国演出经纪人员资格认定考试试题库及完整答案.docx
- 2025年全国演出经纪人员资格认定考试试卷完美版.docx
- 2025年全国演出经纪人员资格认定考试试卷含答案(实用).docx
- 2025年全国演出经纪人员资格认定考试试卷及答案(各地真题).docx
- 2025年下半年内江市部分事业单位公开考试招聘工作人员(240人)备考题库附答案.docx
- 2025年全国演出经纪人员资格认定考试试卷及答案1套.docx
- 2025年下半年四川成都市郫都区面向社会引进公共类事业单位人员2人备考题库最新.docx
- 2025年下半年内江市部分事业单位公开考试招聘工作人员(240人)备考题库附答案.docx
最近下载
- 山东事业编考试护理类历年真题共6套真题.pdf VIP
- 2024年湖北省高考数学试卷(含答案详解).docx
- 个旧市天黎冶炼厂铅银废料绿色环保综合利用项目.项目环境影响报告书.pdf VIP
- 悬架系统设计计算软件EXCEL.xls VIP
- 2025年北京市东城区中考英语一模试卷.pdf VIP
- 2016年湖北省武汉市中考物理试题.pdf VIP
- 《许三观卖血记中许三观的人物形象分析》6200字.docx VIP
- 九年级社会第二单元练习试卷.doc VIP
- 2025年青岛事业编题库及答案护理题.doc VIP
- 农业部953号公告-11.1-2007-转基因植物及其产品环境安全检测抗除草剂玉米-第1部分-除草剂耐受性.pdf VIP
原创力文档

文档评论(0)