论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
主机系统
›
linux
›
c++项目:one thread oneloop式并发服务器实现(一) ...
c++项目:one thread oneloop式并发服务器实现(一)
慢吞云雾缓吐愁
论坛元老
|
2024-8-11 02:59:55
|
显示全部楼层
|
阅读模式
楼主
主题
1631
|
帖子
1631
|
积分
4893
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
更新中......
媒介:本项目基于muduo库,通过模仿,实现实现出一个高并发服务器组件,通过该组件,可以简洁快速的搭建出一个高性能的服务器。为了便于展示,本项目将实现一个基于Reactor模式的高性能TCP服务器。
目标定位:本项目实现的是主从Reactor模子服务器,主Reactor线程仅仅监听形貌符,获取新连接保证获取连接的高效性,提高服务器的性能;当主Reactor获取到新连接后,会分发给子Reactor进行变乱监控,子Reactor线程根据各自的形貌符的读写变乱进行数据读写以及处置惩罚业务。
功能模块划分:
整个项目包罗两大模块:
SERVER模块:实现Reactor模子的TCP服务器;
协议模块:对当前Reactor模子服务器提供应用层协议支持
SERVER模块:
此模块用于对全部连接以及线程进行管理,详细分为以下三个方面:
监听变乱管理
通信连接受理
超时连接受理
详细和划分为以下多个子模块:
Buffer模块:
用于实现通信套接字的用户缓冲区;
目的:1.为了防止接收到的数据不完备,因此对接收的数据进行缓冲;
2.对于客户端相应的数据,应该是在套接字可写的情况下进行发送。
功能设计:向缓冲区添加&取出数据。
Socket模块:
对socket套接字进行封装,让程序对于套接字的各项操作更加简便;
功能设计:创建套接字、绑定所在信息、监听、发起连接、获取新连接、接收&发送数据、关闭套接字、创建监听连接、创建客户端连接
Channel模块:
对一个形貌符进行监控变乱管理,便于服务器维护以及触发变乱后的操作流程更加清楚;
功能设计:
1.对监控变乱的管理:检测形貌符的IO状态、修改形貌符的IO状态、接触对应变乱的监控;
2.对监控变乱触发后的处置惩罚:设置不同变乱的回调处置惩罚函数;
Connection模块:
此模块是对上述对Buffer模块,Socket模块,Channel模块的⼀个整体封装,实现了一共对通信套接字的管理。
功能设计:
1.Connection模块内部包罗有三个由组件利用者传入的回调函数:连接创建完成回调,变乱回调, 新数据回调,关闭回调。
2.Connection模块内部包罗有两个组件利用者提供的接口:数据发送接口,连接关闭接口。
3.Connection模块内部包罗有两个用户态缓冲区:用户态接收缓冲区,用户态发送缓冲区。
4. Connection模块内部包罗有⼀个Socket对象:完成形貌符面向系统的IO操作。
5. Connection模块内部包罗有⼀个Channel对象:完成形貌符IO变乱就绪的处置惩罚。
Acceptor模块:
此模块对Scoket模块、Channel模块进行整体封装,实现了对一个监听套接字的整体管理。
功能设计:
1.实现向Channel通过可读变乱的IO变乱处置惩罚回调函数。
2.为新链接创建一个Connection对象。
TimeQueue模块:
此模块为定时使命管理器模块,实现添加定时使命、删除定时使命、刷新定时使命,实现对Connection对象的生命周期管理。
功能设计:对通过linux系统提供的定时器实现IO时间就绪的回调处置惩罚。
Poller模块:
此模块是对epoll进行封装,实现epoll的IO变乱添加、修改、移除、获取新连接。
EventLoop模块:
此模块是对Poller模块、TimerQueue模块、Socket模块的一个整体封装,进行全部形貌符的变乱监控。
功能设计:
1.eventLoop模块内部包罗有⼀个eventfd:专门用于变乱通知。
2.EventLoop模块内部包罗有⼀个Poller对象:用于进行形貌符的IO变乱监控。
3.EventLoop模块内部包罗有⼀个TimerQueue对象:用于进行定时使命的管理。
4.EventLoop模块内部包罗有⼀个PendingTask队列:组件利用者将对Connection进行的全部操作, 都参加到使命队列中,由EventLoop模块进行管理,并在EventLoop对应的线程中进行实行。(EventLoop模块必然是⼀个对象对应⼀个线程的模块,线程内部的目的就是运行EventLoop的启动函数)
5.每一个Connection对象都会绑定到一个EventLoop上,可以可以保证对这个连接的全部变乱都是在一个线程中完成的。
TcpServer模块:
此模块是一个整体的Tcp服务器的封装,内部封装了Acceptor模块、EventLoopThreadPool模块(EventLoop线程池)。
功能实现:
1.TcpServer中包罗有⼀个EventLoop对象:以备在超轻量利用场景中不须要EventLoop线程池,只须要在主线程中完成全部操作的情况。
2.TcpServer模块内部包罗有⼀个EventLoopThreadPool对象:其实就是EventLoop线程池,也就是 子Reactor线程池。
3.TcpServer模块内部包罗有⼀个Acceptor对象:⼀个TcpServer服务器,必然对应有⼀个监听套接 字,能够完成获取客客户端新连接,并处置惩罚的使命。
4.TcpServer模块内部包罗有⼀个std::shared_ptr<Connection>的hash表:保存了全部的新建连接 对应的Connection,注意,全部的Connection利用shared_ptr进行管理,这样能够保证在hash表 中删除了Connection信息后,在shared_ptr计数器为0的情况下完成对Connection资源的释放操作。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
慢吞云雾缓吐愁
论坛元老
这个人很懒什么都没写!
楼主热帖
聊聊 C# 方法重载的底层玩法 ...
使用 Mypy 检查 30 万行 Python 代码, ...
Linux安装PHP8 新版笔记
微信公众平台测试号申请、使用HBuilder ...
Blazor WebAssembly + Grpc Web = 未来 ...
【只与自己有关】人往高处走?何为高? ...
【MAC工具】各个Xcode版本对应macOS的 ...
Apache Shiro 身份验证绕过漏洞 (CVE-2 ...
Java多线程(7):JUC(上)
WPF 视频硬解码渲染播放(无空域问题) ...
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
前端开发
快速回复
返回顶部
返回列表