当前位置: 首页> 科技> 能源 > 房屋设计风格_平面广告怎么设计_企业推广视频_广州网站优化多少钱

房屋设计风格_平面广告怎么设计_企业推广视频_广州网站优化多少钱

时间:2025/9/9 4:17:38来源:https://blog.csdn.net/qhy850716/article/details/143367680 浏览次数:0次
房屋设计风格_平面广告怎么设计_企业推广视频_广州网站优化多少钱

一、模块设计思路

1、目的

对所有模块整合,实现一个服务器模块供外部快速搭建服务器。

2、管理

监听套接字

主 Reactor,创建 EventLoop _baseloop 对象,进行对监听套接字的管理

哈希表管理所有新连接的 Channel

创建线程池进行连接的事件处理

3、功能

设置线程数量

启动服务器

设置新连接回调函数(外部传入连接建立,业务处理,关闭连接,任意事件等待回调函数,TcpServer 再设置给 Connection 最后完成监听套接字的读事件回调函数)

是否启动非活跃连接定时销毁

添加定时任务

4、流程

TcpServer 中创建 Acceptor 对象,并用 _baseloop 对象进行管理

Acceptor 读事件就绪,接收新连接,调用读事件回调函数

创建 Connection 管理新连接

设置新连接回调函数

启动 Connection 超时连接销毁

新连接绑定线程池中返回的下一个线程进行线程安全的事件监控

有事件就绪新连接就处理回调函数

二、成员变量

分配接收到的新连接 id:uint64_t _connid;

绑定端口号:int _port;

超时任务时间:int _timeout;

是否开启超时销毁:bool _inactive_release;

主 Reactor:EventLoop _baseloop;

监听套接字:Acceptor _acceptor;

线程池:LoopThreadPool _pool;

记录新连接:unordered_map<uint64_t, PtrConnection> _conns;

四个外部传入的回调函数:

using ConnectedCallback = function<void(const PtrConnection &)>;

using MessageCallback = function<void(const PtrConnection &, Buffer *)>;

using CloseCallback = function<void(const PtrConnection &)>;

using EventCallback = function<void(const PtrConnection &)>;

using Functor = function<void()>;

ConnectedCallback _connected_callback; // 连接建立后的回调函数

MessageCallback _message_callback;     // 业务处理的回调函数

CloseCallback _close_callback;         // 关闭连接的回调函数

EventCallback _event_callback;         // 任意事件的回调函数

三、成员函数

1、私有函数1:获取新连接后的设置操作(相当于监听套接字读回调)void ConnCallback()

新连接 id++

为新连接创建 Connection,并设置5个回调函数

开启非活跃连接销毁

新连接开始监控读事件

添加新连接

注意:要先非活跃再监控读事件,因为在读事件的回调里面有刷新任务,如果找不到任务队列就会报错

2、私有函数2:删除服务器记录的连接(线程安全) void RemoveConnectionInLoop(const Connection &conn)

找到哈希表里面的指定连接删除

3、私有函数3:删除服务器记录的连接 void RemoveConnecction(const Connection &conn)

绑定 _baseloop 里面的 RunInLoop 函数

4、私有函数4:添加定时任务(线程安全)void AddTaskInLoop(const Functor &task, int timeout)

调用 _baseloop 里面的 TimerAdd 函数

5、公有函数1:构造函数

主 Reactor 要在监听套接字之前初始化

线程池的构造不能在构造函数里面完成,要等线程池数量确定后在启动接口里面初始化

设置监听套接字的读回调函数后,启动监听

6、公有函数2:设置线程数量 void SetThreadCount(int count)

调用 _pool 里面的设置线程数量函数

7、公有函数3:启动非活跃连接销毁 void EnableInactiveRelease(int timeout)

设置非活跃标志位

设置延迟时间

8、公有函数4:添加定时任务 void AddTask(const Functor &task, int timeout)

绑定 _baseloop 里面的 RunInLoop 函数

9、公有函数5:开启服务器 void Start()

线程池初始化

_baseloop 启动

10、设置4个外部回调 

有一个服务器删除连接回调已经在私有函数里面实现,用于新连接的5个回调函数实现

四、代码展示

关键字:房屋设计风格_平面广告怎么设计_企业推广视频_广州网站优化多少钱

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: