计算机网络-服务器模型

一.服务器模型

1.支持多客户端访问

//单循环服务器

socket

bind

listen

while(1)

{

accept

while(1)

{

recv/send

}

}

close

注:该模式remvform为阻塞态,服务器将等待接收数据

2..支持多客户端同时访问 (并发能力)

socket

bind

listen

while(1)

{

connf = accept

pid_t pid = fork();

//出错处理

if (pid == 0)

{

while(1) //负责 与 客户端通信的

{

recv/send

}

}

}

close

注:将管道设置成非阻塞一直读取

读端设置非阻塞

//线程

void *handle_client(void *arg)

{

while(1) //子线程中 负责 与 客户端通信的

{

recv/send

}

}

socket

bind

listen

while(1)

{

connf = accept

pthread_create();

//出错处理

}

close

二,三种服务器模型:

1.单循环服务器

2.并发服务器

进程

线程

1、简单循环服务器

http

web 服务器,apache--》cgi,php,perl,IIS--》asp,NGIX,Nlighty

while(1)

{

newfd = accept();

recv();

close(newfd);

}

特点:可以接入多个客户端的信息。

缺点:数据通信过程短,客户端只能一次有效。

实时性效果差。

2、fork循环服务器===>每次有链接则fork一个子进程为该

链接处理通信过程,父进程继续等待新链接。

while(1)

{

newfd = accept();

pid = fork()

if(pid == 0)

{

///接收数据

}

if(pid < 0)

{

perror("fork");

return -1;

}

waitpid()

}

特点:可以完成多个进程的实时交互,信息的完整性可以保证。

缺点:回收资源不方便,每次fork 占用系统资源多。

可能出现僵尸进程

多线程:

特点:

创建速度快,调度快

缺点:

线程共享进程资源,稳定性,安全性 较差

3.并发的服务器模型 ---更高程度上的并发

IO模型

阻塞IO

非阻塞IO

1、阻塞IO

用的最多。

读阻塞。

写阻塞。

2、非阻塞IO

-1 errno EAGAIN whild(1){read()break;}忙等待

contro

注:信号驱动IO

4.SELECT函数并发

#include <unistd.h>

#include <fcntl.h>

int fcntl(int fd, int cmd, ... /* arg */ );

功能:修改指定文件的属性信息。

参数:fd 要调整的文件描述符

cmd 要调整的文件属性宏名称

... 可变长的属性值参数。

返回值:成功 不一定,看cmd

失败 -1;

int fcntl(int fd, int cmd, ... /* arg */ );

//驱动:

//1.驱动程序 ---- 驱使硬件工作起来的程序

让灯亮起来

//2.应用程序

应用程序

led_ctnl(led_fd,ON );

led_ctnl(led_fd,OFF );

led_ctnl(led_ctnl,STREAM); //流水灯

eg:修改文件的非阻塞属性:

int flag ;

flag = fcntl(fd,F_GETFL,0); ///获取fd文件的默认属性到flag变量中。

flag = flag | O_NONBLOCK; ///将变量的值调整并添加非阻塞属性

fcntl(fd,F_SETFL,flag); ///将新属性flag设置到fd对应的文件生效。

以上代码执行后的阻塞IO将变成非阻塞方式。

相关推荐
七夜zippoe18 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥18 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
Fcy64820 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满20 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠20 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
主机哥哥20 小时前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
Harvey90320 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技21 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀1 天前
Linux环境变量
linux·运维·服务器
zzzsde1 天前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器