服务器网络模型(2)---服务器的请求处理流程

来源:互联网 发布:家具画图软件 编辑:程序博客网 时间:2024/05/01 16:00

服务器的请求处理大致可以分为以下几个阶段:


       前面的I/O模型负责了【事件分离】阶段,【处理请求】阶段由工作线程来完成,而【断包】阶段在不同的模型中会选择前靠或者后靠,因为断包和具体的服务器协议有关,因此难以在框架阶段做更多的假设(定长包头协议和流式协议是完全不同的处理方式),根据不同的网络框架,断包是紧靠【事件分离】还是紧靠【处理请求】,它是受一定限制的。

       断包的局限性主要体现在TCP协议对数据的处理,TCP协议将数据作为流处理,因此单次的事件并不意味着一个完整的请求,可能存在数据拆分和拼接。UDP协议可以忽略这个问题,因为UDP协议是以整个包来组织网络传输的数据。

       对于应用层协议这里多说两句,目前流行的协议类型主要是两种:二进制定长包头协议和流式协议。二进制定长包头协议的组织方式类似于TCP/IP报文段,流式协议类似于XML。流式协议具有更好的描述性,增加新协议简单,但协议处理起来比较麻烦,需要边解析边断包,因此容易和【处理请求】相耦合,同时从服务器处理数据的安全性来说,它也稍差一些。二进制协议容易断包,和前后阶段耦合也较小,但协议内容不容易扩展,有时候甚至需要重新编译服务器。一个较好的结合二者优点的方式是定长包头+流式协议包体。

       【回包】阶段后面将不做较多的讨论,主要关注在读阶段。对于回包,保持几个原则:较少的数据拷贝;用writev减少小数据的多次写;尽可能避免锁竞争;尽可能减少线程切换。


原创粉丝点击