Web Server项目实战4-服务器编程基本框架和2种高效的事件处理模式

news2024/11/17 9:38:30

服务器编程基本框架

虽然服务器程序种类繁多,但其基本框架都一样,不同之处在于逻辑处理

模块功能
I/O处理单元处理客户连接,读写网络数据
逻辑单元业务进程或线程
网络存储单元数据库、文件或缓存
请求队列各单元之间的通信方式

I/O 处理单元是服务器管理客户连接的模块。它通常要完成以下工作:等待并接受新的客户连接,接收客户数据,将服务器响应数据返回给客户端。但是数据的收发不一定在 I/O 处理单元中执行,也可能在逻辑单元中执行,具体在何处执行取决于事件处理模式。

一个逻辑单元通常是一个进程或线程。它分析并处理客户数据,然后将结果传递给 I/O 处理单元或者直接发送给客户端(具体使用哪种方式取决于事件处理模式)。服务器通常拥有多个逻辑单元,以实现对多个客户任务的并发处理。

网络存储单元可以是数据库、缓存和文件,但不是必须的。

请求队列是各单元之间的通信方式的抽象。I/O 处理单元接收到客户请求时,需要以某种方式通知一个逻辑单元来处理该请求。同样,多个逻辑单元同时访问一个存储单元时,也需要采用某种机制来协调处理竞态条件。请求队列通常被实现为池的一部分

2种高效的事件处理模式

服务器程序通常需要处理三类事件:I/O 事件、信号及定时事件。有2种高效的事件处理模式:Reactor Proactor,同步 I/O 模型通常用于实现 Reactor 模式,异步I/O 模型通常用于实现 Proactor模式。

Reactor模式

要求主线程(I/O 处理单元只负责监听文件描述符上是否有事件发生,有的话就立即将该事件通知工作线程(逻辑单元),将 socket 可读可写事件放入请求队列,交给工作线程处理。除此之外,主线程不做任何其它实质性的工作。读写数据、接受新的连接,以及处理客户请求均在工作线程种完成。

使用同步 I/O (以epoll_wait为例)实现的 Reactor 模式的工作流程是:

1.主线程往 eopll 内核事件表中注册 socket 上的读就绪事件;

2.主线程调用 epoll_wait 等待 socket 上有数据可读

3.当 socket 上有数据可读时,epoll_wait 通知主线程,主线程则将 socket 可读事件放入请求队列;

4.睡眠在请求队列上的某个工作线程被唤醒,它从 socket 读取数据,并处理客户请求,然后往 epoll 内核事件表中注册该 socket 上的写就绪事件

5.当主线程调用 epoll_wait 等待 socket 可写;

6.当 socket 可写时,epoll_wait 通知主线程,主线程将 socket 可写事件放入请求队列;

7.睡眠在请求队列上的某个工作线程被唤醒,它往 socket 上写入服务器处理客户请求的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1684244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

520主题趣味小游戏玩法线上互动的作用是什么

行业商家借势520气氛,往往能低成本达到预期效果,包括但不限于品牌传播、渠道引流涨粉、用户促活引导等,除了前面推荐的互动玩法外,在【雨科】平台的这几款520趣味小游戏同样值得关注。 1、爱你不止520 这是一款九宫格抽奖活动&am…

【Java面试】三、Redis篇(下)

文章目录 1、抢券场景2、Redis分布式锁3、Redisson实现分布式锁4、Redisson实现的分布式锁是可重入锁5、Redisson实现分布式锁下的主从一致性6、面试 1、抢券场景 正常思路: 代码实现: 比如优惠券数量为1。正常情况下:用户A的请求过来&a…

利用神经网络学习语言(六)——总结与常见面试问题

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 文章列表: 利用神经网络学习语言(一)——自然语言处理的基本要素利用神经网络学习语言&…

基于STM32看Cortex-M内核相关的一些底层知识

文章目录 固件起始地址存储了主栈指针和向量表内容启动文件分析程序启动流程Code,RO Data,RW Data, ZI Data启动流程Regin$$Table 固件起始地址存储了主栈指针和向量表内容 《ARM Cortex-M3与Cortex-M4权威指南》中的4.8章节复位和复位流程中有下面这段的描述: 在复…

医疗软件供应链安全治理:保障医疗服务质量和患者安全的当务之急!

如今,随着医疗数智化的不断深入,医共体网络、远程医疗网络、区域医疗网络、互联网医院等系统建设日益普及,医疗信息系统从基础应用进阶到智能医疗阶段。医疗机构对医疗软件采购、外包开发以及调用第三方开发资源的需求日益增加。 然而&#x…

buuctf的RSA(二)

1.RSA 知道 flag.enc 和 pub.key,典型的加密、解密 将pub,key 改为pub.txt 打开后发现公钥 在RSA公私钥分解 Exponent、Modulus,Rsa公私钥指数、系数(模数)分解--查错网 进行解密 得到e65537 n8693448229604811919066606200349480058890565…

S-Clustr+H4vdo 僵尸网络锁屏播放锁屏插件

项目地址:https://github.com/MartinxMax/S-Clustr-Ring 视频 用法 安装H4vdo依赖 在Install目录中选择你的操作系统安装依赖Windows_H4vdo_plugin_installation 启动H4vdo服务端 $ python3 Generate.py [Device Type (Number)]>7 [] [0] Start RTMP server [1] Skip &g…

家政预约小程序05服务管理

目录 1 设计数据源2 后台管理3 后端API4 调用API总结 家政预约小程序的核心是展示家政公司提供的各项服务的能力,比如房屋维护修缮,家电维修,育婴,日常保洁等。用户在选择家政服务的时候,价格,评价是影响用…

关于抖音小程序开发代码修改了,但是真机调试代码不更新问题解决(全网第一成功解决方案,无论安卓或苹果)

各位铁铁,今天开发小程序在抖音小程序适配时,终于是又一次踩到这个恶心的坑了,现在就记录一下,方便我以后查找,也希望帮助到当前被它所坑害的你! 具体实现步骤如下: 1.到你的抖音开发平台&…

高效利用键盘上的 caps lock(大写键)实现中英切换

先看效果 在中文输入环境中,Caps Lock 键经常被忽视,占据了键盘上的黄金位置却很少派上用场。接下来,我将介绍如何将这个闲置的键合理利用,让它变得更加实用。 第一步 设置: 我以五笔为例: 1.输入法默认…

国内快速下载hugging face大模型的方法

由于众所周知的原因,从hugging face下载大模型比较困难,幸好国内有人做了镜像站,可以通过国内的镜像站进行快速下载,以下是配置方法。 我的系统是ubuntu 22,这里记录的方法只对debian/ubuntu有效。 git-lfs/INSTALLI…

精准安全运维,统信UOS服务器版V20(1070)漏洞修复指南丨年度更新

随着信息安全威胁的不断升级,操作系统的安全性已成为企业运维的关键要素。 为了确保业务运行环境的安全无忧,统信软件持续致力于技术创新和优化,并于日前重磅推出了统信UOS服务器版V20(1070)。该系统提供了高频补丁更…

将黑白图的白色部分叠加在彩色原图

彩色原图: 黑白图: 合成后: 代码: import cv2 import numpy as np# 读取原图和轮廓线条图 original_img cv2.imread(..\\IMGS\\pp.png) # 替换为原图路径 contour_img cv2.imread(..\\IMGS\\pp_edge.png, cv2.IMREAD_GRAYSCAL…

1 计算机硬件-CPU-校验码-存储系统-输入输出设备-总线结构

计算机硬件 考情分析:趋势很小,22年考过,根据趋势以后考的可能较小 基本组成:运算器,控制器,储存器,输入设备,输出设备运算器和控制器也统称为中央处理单元(CPU&#xf…

flutter使用dbus插件时,在终端无法使用“dart-dbus”命令

不用flutter的人,可能都不会找到这儿,遇到这个问题,所以这里默认flutter已经装过了,且对flutter如何使用插件也有所了解了。 由于我在项目中用到了dbus插件,用法如图所示,我需要使用这条命令来生成一个sou…

多模态大模型新进展——GPT-4o、Project Astra关键技术丨青源Workshop第27期

青源Workshop丨No.27 多模态大模型新进展—GPT-4o、Project Astra关键技术主题闭门研讨会 刚刚过去的两天,OpenAI、Google纷纷发布了多模态大模型的最新成果,GPT-4o、Project Astra先后亮相。 本周五(北京时间5月17日)18点&#x…

supOS NEO科技普惠!永久免费!亿元补贴

数字化转型正在全球蓬勃发展,工业操作系统进入大规模推广期! 如果您正在被预算不足、技术团队不强、数字化投入产出比等问题困扰,supOS NEO是您最好的选择。 “让supOS走进万千工厂、千行百业!让全世界每个工厂都能用得上supOS&am…

Mysql与Navicat可视化命令大全 ----项目实战

软件准备:✍Mysql8.0下载地址(推荐)✍Navicat 16 下载地址(推荐) 注:不会安装看主页,关注我,免费指导,接计算机毕设☑ -----------------------------------------------…

尽在掌握:Android 13 通知新功能详解

尽在掌握:Android 13 通知新功能详解 在移动应用开发中,通知扮演着至关重要的角色,它如同应用程序与用户之间的桥梁,及时传递关键信息,提升用户体验。Android 13 作为最新的安卓版本,在通知方面带来了诸多…

工程项目核算报价-项目CPQ报价系统控成本高效完成工程项目报价

首先了解一下CPQ报价如何解决工程项目报价难的? 目前市场上的工程项目报价方案制作效率低,易出错,反复修改,成本核算的过程不够严谨,凭以经验和数据大差不差的估算当下项目,报价过程中会忽略侧面因素,导致…