1 Star 2 Fork 0

Camelot-23 / enet

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
BSD-3-Clause-Clear

Reactor Project

基于Reactor模式的Linux C++网络服务端,支持多线程TCP服务器,单线程TCP服务器

机器配置

manjaro kde(vmware虚拟机环境)
2核心4线程 4GB内存 一个网卡
测试程序每次发送120字节数据,然后接收服务端回复,循环1W次

性能测试

服务端线程数 客户端连接 QPS
1主1从 10连接 2000/s
1主2从 10连接 4000/s
1主4从 20连接 9756/s
1主8从 20连接 2.1W/s
1主10从 20连接 4.65W/s

介绍

基于epoll的IO Event
IO事件设置为非阻塞,由epoll进行管理,使用边缘触发模式。

至少需要一个EventLoop,为主事件循环,用于监听、通信。
如果添加了多个EventLoop,其余的为从事件循环,处理客户端的通信事件,主事件循环只处理连接事件。

粘包/分包处理
固定前四字节为消息的长度大小。使用Buffer,当收到一条完整的消息后才回调给上层处理。

消息回复
如果处理消息时间较长,可以添加工作线程,处理完成后,通过eventfd唤醒事件循环回复消息,以避免阻塞从事件循环。

超时处理
使用timerfd定时器,定期对超时的客户端连接进行清理。

程序退出
通过信号退出程序,清理所有线程。

核心类

类名 作用
Epoll 管理epoll的创建、添加、删除、等待事件
EventLoop 对Epoll的封装
主事件循环回调Acceptor
从事件循环回调Connector
被eventfd唤醒后执行任务队列的任务,被timerfd唤醒后,清理过期的Connector
Acceptor 处理客户端连接事件
Connector 处理客户端通信事件
TcpServer 管理类,管理主从事件循环,以及Acceptor和所有的Connector

使用说明

编译
cd 项目根目录
cmake -B build -S .
cmake --build build

运行
cd /build/src/net
./server 127.0.0.1 5555 4 4
./test 127.0.0.1 5555


2024/04/29 --elot

The Clear BSD License Copyright (c) 2024, Camelot-23 All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted (subject to the limitations in the disclaimer below) provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

Reactor高并发网络服务器 展开 收起
C++ 等 4 种语言
BSD-3-Clause-Clear
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/Camelot-23/enet.git
git@gitee.com:Camelot-23/enet.git
Camelot-23
enet
enet
master

搜索帮助