不可不知 Linux操作系统网络服务器模型-阿里云开发者社区

开发者社区> 寒凝雪> 正文

不可不知 Linux操作系统网络服务器模型

简介:
+关注继续查看

 Linux系统网络服务器模型主要有两种:并发服务器和循环服务器。

  所谓并发服务器就是在同一个时刻可以处理来自多个客户端的请求;循环服务器是指服务器在同一时刻指可以响应一个客户端的请求。而且对于TCP和UDP套接字,这两种服务器的实现方式也有不同的特点。

  1、TCP循环服务器:

  首先TCP服务器接受一个客户端的连接请求,处理连接请求,在完成这个客户端的所有请求后断开连接,然后再接受下一个客户端的请求。

  创建TCP循环服务器的算法如下:socket(……); //创建一个TCP套接字bind(……); //邦定公认的端口号listen(……); //倾听客户端连接while(1) //开始循环接收客户端连接{ accept(……);//接收当前客户端的连接while(1)

  { //处理当前客户端的请求read(……);process(……);write(……);} close(……); //关闭当前客户端的连接,准备接收下一个客户端连接} TCP循环服务器一次只处理一个客户端的请求,如果有一个客户端占用服务器不放时,其它的客户机连接请求都得不到及时的响应。因此,TCP服务器一般很少用循环服务器模型的。

  2、TCP并发服务器:

  并发服务器的思想是每一个客户端的请求并不由服务器的主进程直接处理,而是服务器主进程创建一个子进程来处理。

  创建TCP并发服务器的算法如下:socket(……); //创建一个TCP套接字bind(……); //邦定公认的端口号listen(……);//倾听客户端连接while(1) //开始循环接收客户端的接收{ accept(……);//接收一个客户端的连接if(fork(……)==0) //创建子进程{ while(1)

  { //子进程处理某个客户端的连接read(……);process(……);write(……);} close(……); //关闭子进程处理的客户端连接exit(……) ;//终止该子进程} close(……); //父进程关闭连接套接字描述符,准备接收下一个客户端连接} TCP并发服务器可以解决TCP循环服务器客户端独占服务器的情况。但同时也带来了一个不小的问题,即响应客户机的请求,服务器要创建子进程来处理,而创建子进程是一种非常消耗资源的操作。

  3、UDP循环服务器:

  UDP服务器每次从套接字上读取一个客户端的数据报请求,处理接收到的UDP数据报,然后将结果返回给客户机。

  创建UDP循环服务器的算法如下:socket(……); //创建一个数据报类型的套接字bind(……); //邦定公认的短口号while(1) //开始接收客户端的连接{ //接收和处理客户端的UDP数据报recvfrom(……);process(……);sendto(……);//准备接收下一个客户机的数据报}因为UDP是非面向连接的,没有一个客户端可以独占服务器。只要处理过程不是死循环,服务器对于每一个客户机的请求总是能够处理的。

  UDP循环服务器在数据报流量过大时由于处理任务繁重可能造成客户技数据报丢失,但是因为UDP协议本身不保证数据报可靠到达,所以UDP协议是允许丢失数据报的。

  鉴于以上两点,一般的UDP服务器采用循环方式4、UDP并发服务器把并发的概念应用UDP就得到了并发UDP服务器,和并发TCP服务器模型一样是创建子进程来处理的。

  创建UDP并发服务器的算法如下:socket(……); //创建一个数据报类型的套接字bind(……); //邦定公认的短口号while(1) //开始接收客户端的连接{ //接收和处理客户端的UDP数据报recvfrom(……);if(fork(……)==0) //创建子进程{ process(……);sendto(……);}除非服务器在处理客户端的请求所用的时间比较长以外,人们实际上很少用这种UDP并发服务器模型的。

  4、多路复用I/O并发服务器:

  创建子进程会带来系统资源的大量消耗,为了解决这个问题,采用多路复用I/O模型的并发服务器。采用select函数创建多路复用I/O模型的并发服务器的算法如下:

  初始化(socket,bind,listen);while(1)

  {设置监听读写文件描述符(FD_*);调用select;如果是倾听套接字就绪,说明一个新的连接请求建立{建立连接(accept);加入到监听文件描述符中去;}否则说明是一个已经连接过的描述符{进行操作(read或者write);}多路复用I/O可以解决资源限制问题,此模型实际上是将UDP循环模型用在了TCP上面。这也会带了一些问题,如由于服务器依次处理客户的请求,所以可能导致友的客户会等待很久。

本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
因云而生 阿里云发布云服务器操作系统Alinux3:性能最高提升40%
阿里云正式推出第三代云服务器操作系统Alibaba Cloud Linux 3(以下简称Alinux3),基于“因云而生”的云原生技术理念,Alinux3进一步提升了云上客户的安全性、稳定性和运行时性能,并深度融合自研软件生态,全面兼容 RHEL/CentOS 8生态,优化后主流应用性能提升10%~40%;同时提供长达8年的免费软件维护和技术支持,保障开发者最佳云上操作体验。
3444 0
windows 7操作系统如何修改网络连接的名字
前段时间遇到一个恼人的问题,因为配置了一个路由器,本地连接被改变了,想修改过来,然后baidu 谷歌了很久没找到答案,今天还是万能的度娘帮到了。 情况是这样,原来windows 7的网络连接都有一个名字,如下 这个网络连接名字为VOPHONE,我们想把它修改成为其他名字,这时候如...
579 0
磨刀不误砍柴工,搞定云网络系统性能测试
在本文中,首先简单介绍一下网络性能测试指标重点会关注哪些指标、在开展性能测试时,如何预估系统性能以便合理的规划和部署测试环境,然后会介绍基本的网络连通性测试工具、网络性能测试工具以及在开展性能测试时如何部署监控,更加直观的统计性能指标等。
226 0
云服务器应该怎样来选择操作系统(Linux+Window) - 阿里云建站
如何选择适合网站的阿里云云服务器ECS操作系统;阿里云云服务器ECS的操作系统有什么区别;阿里云linux服务器和windows服务器有何不同呢?
281 0
Android官方开发文档Training系列课程中文版:网络操作之网络连接
原文地址:http://android.xsoftlab.net/training/basics/network-ops/index.html 引言 这节课将会学习最基本的网络连接,监视网络连接状况及网络控制等内容。
676 0
云服务器如何选择操作系统(Linux+Window) --- 阿里云建站
如何选择适合网站的阿里云云服务器ECS操作系统,阿里云云服务器ECS的操作系统有什么区别,阿里云linux服务器和windows服务器有何不同呢?
269 0
Android官方开发文档Training系列课程中文版:网络操作之网络管理
原文地址:http://android.xsoftlab.net/training/basics/network-ops/managing.html 这节课将会学习如何对网络资源的使用情况拥有更细粒度的控制力。
597 0
如何选择阿里云服务器操作系统?阿里云操作系统说明文档(Linux+Window)
阿里云云服务器ECS的操作系统有什么区别,阿里云linux服务器和windows服务器有何不同呢?
215 0
+关注
5854
文章
223
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载