慢吞云雾缓吐愁 发表于 2024-8-11 02:59:55

c++项目:one thread oneloop式并发服务器实现(一)

更新中......
媒介:本项目基于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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: c++项目:one thread oneloop式并发服务器实现(一)