怎么实现一个网站的Web Server(下)

时间:2021-07-16 | 标签: | 作者:Q8 | 来源:网络

小提示:您能找到这篇{怎么实现一个网站的Web Server(下)}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的怎么实现一个网站的Web Server(下)内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您!

 怎么实现一个网站的Web Serve?Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。





定时器 Timer
 
如果一个请求在建立连接后迟迟没有发送数据,或者对方突然断电,应该如何处理?我们需要实现定时器来处理超时的请求。Vino 定时器的实现参考了 Nginx 的设计,Nginx 使用一颗红黑树来存储各个定时事件,每次事件循环时从红黑树中不断找出最小(早)的事件,如果超时则触发超时处理。为了简化实现,在 Vino 中,我实现了一个小顶堆来药房广告图片大全存储定时事件,如果被处理的定时事件同时支持长连接,那么在该请求处理完毕后会更新该请求对应的定时器,也就是重新计时。定时器相关代码见 vn_event_timer.h 和 vn_event_timer.c。
 
HTTP Parser
 
由于网络的不确定性,我们并不能保证一次就能读取所有的请求数据。因此,对于每一个请求,我们都会开辟一段缓冲区用于保存已经读取到的数据。同时,我们需要同时对读取到的数据进行解析,以保证读取到的数据都是合理的数据,例如,假设目前缓冲区内的数据为 GET /index“确认传播”专注于品牌策划、效果营销和危机管理的数字整合营销传播公司,我们深度诠释客户的品牌理念、文化及背景,多维深度传播客户的文化底蕴和核心价值观,提升客户品牌的知名度、关注度与美誉度。 HTT,那么下一次读取到的字符必须为 P,否则,应立即检测出当前请求是一个异常的请求,并主动关闭当前的连接。
 
基于以微信引流技巧上分析,我们需要实现一个 HTTP 状态机(Parser)来维持当前的解析状态,Vino 状态机的实现参考了 Nginx 的设计,并对 Nginx 的实现做了简化。HTTP Parser 相关代码见 vn_http_parse.h 和 vn_http_parse.c。
 
Memory Pool
 
我们一般使用 malloc/calloc/free 来分配/释放内存,但是这些函数对于一些需要长时间运行的程序来说会有一些弊端。频繁使用这些函数分配和释放内存,会导致内存碎片,不容易让系统直接回收内存。典型的例子就是大并发频繁分配和回收内存,会导致进程的内存产生碎片,并且不会立马被系统回收。
 
使用内存池分配内存,可以在一定程度上提升内存分配的效率,不需要每次都调用 malloc/calloc 函数。同时,使用内存池使得内存管理更加简单。在 Vino 中,针对每一个请求,Vino 都会为其分配一或多个内存池(各个内存池形成一个单链表),在请求处理完毕后,一并释放所有的内存。
 
Vino 内存池的实现依旧参考了 Nginx 的实现,并做了简化,Memory Pool 相关代码见 vn_palloc.h 和 vn_palloc.c。
 
其他
 
在开发 Vino 的过程中,还有许多需要考虑和权衡的地方。响应请求时,如果用户请求的是一个很大的文件,导致写缓冲区满,我们如何更好的设计响应缓冲区?如何更高效的设计底层数据结构(如字符串、链表、小顶堆等)?如何更优雅的解析命令行参数?如何对特定信号进行处理?如何更健壮的处理错误信息?当代码的数量达到一定的推广程度后,如何更快的定位异常代码?
 
Vino 的开发 & 重构暂时告一段落,源码放在了 GitHub 上。当然,Vino 还有许多不足之处,以及未实现的特性。
 
仅支持 HTTP GET 方法,暂不支持其他 HTTP method。
 
暂不支持动态请求的处理。
 
支持的 HTTP/1.1 特性有限。
 
以上就是小编对于怎么实现一个网站的Web Serve的全部解答。
 
怎么实现一个网站的Web Server(下)

上一篇:怎么实现一个网站的Web Server(上)
下一篇:怎么提高我们的建站水平?


版权声明:以上主题为“怎么实现一个网站的Web Server(下)"的内容可能是本站网友自行发布,或者来至于网络。如有侵权欢迎联系我们客服QQ处理,谢谢。
相关内容
扫码咨询
    怎么实现一个网站的Web Server(下)
    打开微信扫码或长按识别二维码

小提示:您应该对本页介绍的“怎么实现一个网站的Web Server(下)”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通怎么实现一个网站的Web Server(下)的相关事宜。

关键词:怎么实现一个网站的Web

关于 | 业务 | 案例 | 免责 | 隐私
客服邮箱:545321@QQ.com
电话:400-021-1330 | 客服QQ:545321
沪ICP备12034177号 | 沪公网安备31010702002418号