5.6和5.7、项目整体流程代码实现,解析http请求报文

这篇具有很好参考价值的文章主要介绍了5.6和5.7、项目整体流程代码实现,解析http请求报文。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

代码地址
文章来源地址https://www.toymoban.com/news/detail-424305.html

1.有限状态机

  • 逻辑单元内部的一种高效编程方法:有限状态机(finite state machine)
  • 有的应用层协议头部包含数据包类型字段,每种类型可以映射为逻辑单元的一种执行状态,服务器可以根据它来编写相应的处理逻辑。如下是一种状态独立的有限状态机:
STATE_MACHINE( Package _pack )
{
	PackageType _type = _pack.GetType();
	switch( _type )
	{
		case type_A:
			process_package_A( _pack );
			break;
		case type_B:
			process_package_B( _pack );
			break;
	}
}
  • 这是一个简单的有限状态机,只不过该状态机的每个状态都是相互独立的,即状态之间没有相互转移。状态之间的转移是需要状态机内部驱动,如下代码:
STATE_MACHINE()
{
	State cur_State = type_A;
	while( cur_State != type_C )
	{
		Package _pack = getNewPackage();
		switch( cur_State )
		{
			case type_A:
				process_package_state_A( _pack );
				cur_State = type_B;
				break;
			case type_B:
				process_package_state_B( _pack );
				cur_State = type_C;
				break;
		}
	}
}
  • 该状态机包含三种状态:type_Atype_Btype_C,其中 type_A 是状态机的开始状态,type_C 是状态机的结束状态。状态机的当前状态记录在 cur_State 变量中。在一趟循环过程中,状态机先通过getNewPackage 方法获得一个新的数据包,然后根据 cur_State 变量的值判断如何处理该数据包。数据包处理完之后,状态机通过给 cur_State 变量传递目标状态值来实现状态转移。那么当状态机进入下一趟循环时,它将执行新的状态对应的逻辑。

2.EPOLLONESHOT事件

  • 即使可以使用 ET 模式,一个socket 上的某个事件还是可能被触发多次。这在并发程序中就会引起一个问题。比如一个线程在读取完某个 socket 上的数据后开始处理这些数据,而在数据的处理过程中该socket 上又有新数据可读(EPOLLIN 再次被触发),此时另外一个线程被唤醒来读取这些新的数据。于是就出现了两个线程同时操作一个 socket 的局面。一个socket连接在任一时刻都只被一个线程处理,可以使用 epollEPOLLONESHOT 事件实现。
  • 对于注册了 EPOLLONESHOT 事件的文件描述符,操作系统最多触发其上注册的一个可读、可写或者异常事件,且只触发一次,除非我们使用 epoll_ctl 函数重置该文件描述符上注册的 EPOLLONESHOT 事件。这样,当一个线程在处理某个 socket 时,其他线程是不可能有机会操作该 socket 的。但反过来思考,注册了 EPOLLONESHOT 事件的 socket 一旦被某个线程处理完毕, 该线程就应该立即重置这个socket 上的 EPOLLONESHOT 事件,以确保这个 socket 下一次可读时,其 EPOLLIN 事件能被触发,进而让其他工作线程有机会继续处理这个 socket

到了这里,关于5.6和5.7、项目整体流程代码实现,解析http请求报文的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • openxr runtime Monado 源码解析 源码分析:整体介绍 模块架构 模块作用 进程 线程模型 整体流程

    monado系列文章索引汇总: openxr runtime Monado 源码解析 源码分析:源码编译 准备工作说明 hello_xr解读 openxr runtime Monado 源码解析 源码分析:整体介绍 模块架构 模块作用 进程 线程模型 整体流程 openxr runtime Monado 源码解析 源码分析:CreateInstance流程(设备系统和合成器系统)C

    2024年02月11日
    浏览(81)
  • 【仿写tomcat】四、解析http请求信息,响应给前端,HttpServletRequest、HttpServletResponse的简单实现

    在解析请求之前我们要思考一个问题,我们解析的是其中的哪些内容? 对于最基本的实现,当然是 请求类型 , 请求的url 以及 请求参数 ,我们可以根据请求的类型作出对应的处理,通过url在我们的mapstore中找到servlet, 那么请求的参数我们是不是还没有储存的地方呢? 所以

    2024年02月12日
    浏览(36)
  • HTTP协议概述 | 简析HTTP请求流程 | HTTP8种请求方法

    目录 🌏 HTTP的简单介绍 何为HTTP HTTP1.0与HTTP1.1 🌏 HTTP的请求方法 1、OPTIONS 2、HEAD 3、GET 4、POST 5、PUT 6、DELETE 7、TRACE 8、CONNECT 🌏 HTTP的工作原理 🌏 HTTP请求/响应的步骤 1、客户端连接到Web服务器 2、浏览器客户端发送HTTP请求 3、服务器接受请求并返回HTTP响应 4、释放连接TCP连

    2024年02月03日
    浏览(39)
  • 【springboot+vue项目(十四)】基于Oauth2的SSO单点登录(一)整体流程介绍

    场景:现在有一个前后端分离的系统,前端框架使用vue-element-template,后端框架使用springboot+springSecurity+JWT+Redis(登录部分)现在需要接入到 已经存在的第三方基于oauth2.0的非标准接口 统一认证系统。  温馨提示:如果是接入到 基于oauth2.0的 标准接口的认证服务系统,可以直

    2024年02月19日
    浏览(44)
  • Vue2源码梳理:update的整体实现流程

    update 回到之间 $mount时,mountComponent 函数的过程,vm._render 是如何创建了一个 VNode 接下来就是要把这个 VNode 渲染成一个真实的 DOM 并渲染出来,这个过程是通过 vm._update 完成的 _update 它是一个vue 的私有方法,它把我们的 vnode 渲染成真实的 dom _update的方法,也是原型上的一个方

    2024年02月20日
    浏览(38)
  • http 请求流程,网络的七层模型

    浏览器的【网络进程】开始发起http请求,具体步骤如下: 应用层【也就是浏览器的网络进程】发起http请求 传输层 tcp 三次握手建立连接 http 请求加上 tcp 头部,包括源端口号,目的端口号和用于校验数据完整性的序号,向下传输【这里的上下是计算机网络模型中抽象的上下

    2024年02月02日
    浏览(44)
  • 如何发起一次完整的HTTP的请求流程

    目录 💡 预备知识 🔊 浏览器端发起 HTTP 请求流程 1、构建请求 2、查找缓存 3、准备IP地址和端口 4、等待TCP队列 5、建立TCP连接 6、发送HTTP请求 🔊 服务器端处理 HTTP 请求流程 1、返回请求 2、断开连接 3、重定向 HTTP 是一种允许浏览器向服务器获取资源的协议,是 Web 的基础

    2023年04月24日
    浏览(42)
  • org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 错误注意:HTTP请求解析错误的进一步发生将记录在DEBUG级别。

    运行tomcat时,本以为成功了  结果,突然出现这两个错误 org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 错误注意:HTTP请求解析错误的进一步发生将记录在DEBUG级别。     java.lang.IllegalArgumentException: 在方法名称中发现无效的字符串, HTTP 方法名必须是有效的符号.  

    2024年02月11日
    浏览(42)
  • 【Java EE】-HTTP请求构造以及HTTPS的加密流程

    作者 :学Java的冬瓜 博客主页 :☀冬瓜的主页🌙 专栏 :【JavaEE】 分享 : 在满园弥漫的沉静的光芒之前,一个人更容易看到时间,并看到自己的身影。——史铁生《我与地坛》 主要内容 :构造http请求,不需要写代码直接发送http请求:地址栏输入地址,html中 img标签,scri

    2024年02月02日
    浏览(43)
  • 爬虫实战:从HTTP请求获取数据解析社区

    在过去的实践中,我们通常通过爬取HTML网页来解析并提取所需数据,然而这只是一种方法。另一种更为直接的方式是通过发送HTTP请求来获取数据。考虑到大多数常见服务商的数据都是通过HTTP接口封装的,因此我们今天的讨论主题是如何通过调用接口来获取所需数据。 目前来

    2024年03月20日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包