Linux环境下高并发web服务器 的设计与实现.docx

上传人:黑** 文档编号:81621547 上传时间:2022-04-27 格式:DOCX 页数:31 大小:1.43MB
返回 下载 相关 举报
Linux环境下高并发web服务器 的设计与实现.docx_第1页
第1页 / 共31页
Linux环境下高并发web服务器 的设计与实现.docx_第2页
第2页 / 共31页
Linux环境下高并发web服务器 的设计与实现.docx_第3页
第3页 / 共31页
点击查看更多>>
资源描述
Linux环境下高并发web服务器的设计与实现摘要随着信息技术的飞速开展,互联网已经成为社会生产生活中不可缺少的一局部。特别是近十年来,由于移动技 术的进步和智能移动设备的普及,互联网用户数量呈爆发式增长,越来越多的行业正在通过互联网进行变革。用户 群体的开展改变了互联网服务的形式,越来越多的服务器需要同时为大量客户提供服务。因此,如何设计服务器的 通信框架,如何有效利用服务器的系统资源,成为服务器开发人员关注的焦点。Web应用具有连接间隔短、突发性强、响应时间短等特点,它是一种对并发性要求很高的服务。本文在服务器系 统中选择主流的Linux操作系统,采用C+,结合Socket、I/O多路复用技术epoll、无阻塞I/O、线程池、定时器和 Reactor事件处理模式,设计并实现了一个稳定支持高并发的Web服务器。本文首先介绍和分析了Wob服务器的相关技术,包括Socket、epolK Reactor事件处理模式、线程池和数据库连 接池;重点讨论了epoll与其他I/O模型的区别,以及epoll模型的特点。其次,根据Reactor模式分析了服务器的整图3. 4事件处理器与存储队列存储单元从阻塞队列获取获取数 据进行存储。如图3. 5所示。图3. 5存储队列与存储单元3. 2事件别离器流程事件别离器主要负责接收新连接、侦听到达事件。HTTP长连接可以减少TCP连接的创立次数,使客户端和服务器能 够有效复用TCP连接。但是,“在长连接应用中,服务器与客户端实例都保持一个持久的连接,这将大量消耗服务器资源,特别是在一些大型应用系统中更是如 此,大量并发的长连接有可能导致新的请求被阻塞甚至系统崩溃18。”为了对长连接进行管控,服务器可以通过实现定时器,对每个连接记录超时时间点来解决这个问题。每当某个 连接有新请求到达时重置该连接的定时器,如果连接超时那么服务器主动释放连接。判断超时和重置定时器的工作均 由事件别离器完成,事件别离器工作流程如图3. 6所示。设置新连接的定时 器,把新迩接加入设置新连接的定时 器,把新迩接加入重置龙援的定时器,把 事件和处理方法加入到I 到检测集合中 II 事件阻塞队列中 I图3.6事件别离器流程3. 3事件处理器流程事件处理器是服务器的核心模块,主要负责的工作是:服务器的I/O操作、业务处理,因此对服务器的业务拓展 工作主要是对事件处理器的功能进行拓展。在本工程实现的Web服务器中,I/O操作主要是指对Socket进行读写操 作 ,业务处理主要是指对接收到的HTTP请求报文进行解析,并生成相应的HTTP响应报文。同时为了能够支持用户登录 功能和用户注册功能,当HTTP请求为该两种功能请求时,事件处理器还需要通过访问数据库对接收到的用户名和用 户密码进行判断或存储操作。事件处理器的整体流程如图3. 7所示。图3. 7事件处理器流程在本工程中事件处理器的业务处理可以分为两个模块:HTTP请求报文解析模块、HTTP 响应报文生成模块。3. 3. 1 HTTP请求报文解析模块本模块主要工作是对客户端发送来的HTTP请求报文进行解析。HTTP请求报文由请求行、请求头部、空白行、请 求体构成,每一行都以CRLF (回车符和换行符)作为结尾标志19。在IITTP/L1中,请求行由请求方法、URI、HTTP协议版本构成。请求头部由多行构成,每行以键值对的形式表示 (键为头部字段名)。请求头部包含了一些该连接和报文的信息,如表示长连接状态的keep-alive、请求体的编码 方式content-type等。空白行没有数据只有CRLF表示空白的一行,用来区分请求头部和请求体。请求体携带客户端 发送的数据,如通过POST请求报文发送的表单。HTTP请求解析模块主要有三个状态:解析请求行、解析请求头部、解析请求体。状态转移如图3. 8所示。GET请求报 文和POST请求报文是本文的主要解析对象。GET请求报文把参数存放在URL请求体数据为空,事件处理器无需解析GET请求报文的请求体。POST请求报文的参数被存放在POST请求报文的请求体中,事件处理器需要对 POST请求报文的请求体进行解析,从中获取报文参数。登陆和注册通过POST报文发送请求,用户名和用户密码存放在请求体中。在解析请求体过程中,需要对通过解 析得到的用户名、用户密码进行处理:当报文请求为登录时,向存储单元查询用户名、用户密码进行校验;当报文 请求为注册时,向存储单元查询用户名、密码合法性,如果合法那么进行存储。3.3.2 HTTP响应报文生成模块 本模块主要工作是生成发送给客户端的HTTP响应报文。HTTP响应报文由响应行、响应 头部、空白行、响应体构成,每一行以CRLF表示该行结尾。响应行由HTTP协议 版本、状态码、状态码描述构成。状态码由三个十进制数字组成,状态码的类型由第一个数字定义。状态码和状态码描述表示HTTP响应报文的报 文类型。HTTP响应报文生成模块流程如图3. 9所示。图3. 8 HTTP解析模块状态转移图3. 9 HTTP响应报文生成模块流程“客户端请求资源合法”是指客户端请求的资源存在并且是一些指定的文件,而不是某个文件夹。3.4日志系统日志是记录服务器运行状态的文件,对于服务器开发人员和服务器运维人员而言日志是一种能够直观地观察服 务器状态的重要文件。通过日志,服务器开发人员可以查看服务器的日常运行状态,对服务器架构和功能作出调整 和拓展;服务器运维人员可以根据日志中的错误信息对服务器进行错误排查。日志系统的实现有两种方式:同步模 式和异步模式。同步模式的写入操作与事件处理器串行执行。写日志文件会涉及到I/O操作,同步模式在I/O操作时会阻塞整个 处理流程。当单条日志记录较大时,事件处理器会被阻塞较长时间,整个服务器的并发度将有所下降。如果服务器 需要处理大量连接请求时,写日志操作可能会成为系统瓶颈。异步模式需要阻塞队列作为事件处理器和写日志模块的传输介质。事件处理器把日志记录存入阻塞队列,写日 志模块异步地从阻塞队列中获取日志记录并写入日志文件。异步模式把写日志操作与业务处理流程进行别离,防止 业务处理流程被阻塞,提高了服务器业务处理的并发度。日志记录根据记录信息被划分为多个等级。例如,日志记录被分为调试信息、运行信息、错误信息等几个级别 ,服务器正常运行时仅记录运行信息和错误信息;服务器调试时记录包括调试信息的所有信息。服务器可以根据 不 同的运行状态选择不同的日志等级,过滤无需记录的日志信息,从而提高日志文件的可读性。日志系统的写入记录 流程如图3. 10所示。根据日志等 级、日志参数 创立相应的E 志记录 1 select * from user;Empty set (0.00 sec)图5.7用户表初始内容注册 用户。C O A Not secure192.168.3.1. * y :首页图5.8首页图5. 9注册图5.10注册成功,进入功能界面mysql select * from user;+| username|password|+| 123456|123456|+1 row inset(0.00 sec)图5.11数据库存入用户名、用户密码 登录需要对用 户名、用户密码进行校验。 C O A Not secure 192.16.所 y登录用户名 用户密码确定用户名、用户密码错误=图5. 12用户信息错误,返回错误信息 注册对用户名 进行校验,防止重新注册。图5. 13用户名被注册5. 7文件测试服务器读取内存映射区中的文件数据,作为响应体发送给客户端。S 今 C 。 A Not secure 192.1683.129:2333/. d . * n y图5.14视频测试192.168.3. R 192.168.3. R - C 6 A Not图5. 15图片测试6课题总结本文主要介绍了Linux环境下关于C+服务器开发的相关技术,分析了服务器的整体需求,并设计了一个结合 Reactor模式、epoll、非阻塞I/O以及线程池的高并发Web服务器。其中主要对服务器的高并发相关技术进行了详细 探讨:epoll模式选择、阻塞队列实现原理、主线程与线程池的半同步/半异步模型、日志系统的同步/异步模式。 通过实验测试,可以得知本文设计的服务器在主流PC中运行可以支持上万并发,并且可以保证服务器稳定运行。同时,本文设计的服务器还支持用户登录、注册功能。工作线程通过数据库连接池和RAH机制完成多线程模式 下对数据库的有序访问,并对客户端的用户名、用户密码进行校验。对于文件传输,服务器通过内存映射把资源文 件拷贝进内存,减少了程序对文件读取的I/O操作,加快了文件传输速率。对于长连接,服务器通过小顶堆实现了定 时器,完成了对超时连接的主动释放。本文设计的服务器虽然保证了高并发场景下的稳定运行,但依然存在一些应用场景问题。本文设计的服务器处 理的请求都是无状态的,因此登录功能会失去实际意义。有状态场景需要服务器生成session并向客户端返回 cookie, cookie的生成和session的保存在高并发场景下会变成一个新的难题。我将在后续工作中继续改进,为服务 器的可用性提供更多支持。参考文献1中国互联网络信息中心.第46次中国互联网络开展状况统计报告R.北京:中共中央网络平安和信息化委员会 办公室,中华人民共和国国家互联网信息办公室,2020.2周炎涛,李立明.TCP/IP协议下网络编程技术及其实现J.航空计算技术,2002(03):126-128+132.3W. RichardStevens, BillFenner, AndrewM. Rudoff. UNIX网络编程,第 1 卷,套接口API M.清华大学出版 社,2006.4W. RICHARDSTEVENS. TCP/IP详解.卷1,协议机械工业出版社,2000.5MichaelKerrisk,凯利斯克,孙剑,等.Linux/UNIX系统编程手册M.人民邮电出版社,2014. 6胥光辉,徐永森.同步阻塞线程的唤醒问题研究J.计算机科学,2002, 29(012):49-50.7 Gammo L , Brecht T , Shukla A , et al. Comparing and Evaluating epoll, select, and poll Event Mechanisms. Proceedings of Annual Linux Symposium, 2004.8Linux下基于EPOLL机制的海量网络信息处理模型J.强激光与粒子束,2013, 25(Ozl):46-50. 9游 双.Linux高性能服务器编程加.机械工业出版社,2013.10 Schmidt D C . Reactor - An Object Behavioral Pattern for Demultiplexing and Dispatching Handles for Synchronous Events. 1999.11李璞,张玲,胡术,等.多线程环境下Reactor模式的研究与实现J.网络新媒体技术
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!