用反应器模式和epoll构建百万并发服务器

简介: 用反应器模式和epoll构建百万并发服务器

此处的百万并发指的是可以建立至少100w个客户端连接,不考虑业务处理。

反应器模式下的epoll相比起普通的epoll不同在于:普通的epoll在获取到就绪状态的event结构体之后,先判断是什么类型的fd,再进行操作。而reactor先判断是什么类型的事件,再进行操作。本文从头用reactor设计模式来构建一个epoll服务器,这个过程中每次发生IO事件都要注意维护用户空间的数据结构和内核的epoll实例,下面是构建百万并发服务器的详细地步骤(暂不包含并发量测试):

导入相关的包并设置宏

声明事件处理函数

构建存储数据结构

设计一个结构体,用于存储IO相关的信息,并建立全局数组。后续需要不断地维护该数组,一旦发生了IO事件就需要进行更新。结构体的内容包括:1、文件描述符。2、接收到的数据和数据长度。3、要发送的数据和数据长度。4、用于处理接收数据的回调函数,请求连接和连接成功后接收到数据,要调用不同的处理函数。5、用于处理发送数据的回调函数。

编写epoll实例的维护函数

包括修改节点和增加节点的步骤

实现accept事件的回调函数

某个文件描述符接收到数据之后,相应地要维护全局数组,以及epoll实例。全局数组将相应的节点的fd属性进行修改,并初始化数据区为0,同时还要选择处理接收数据的回调函数。

实现recv事件的回调函数

除了相应的数据区,还要注意修改epoll红黑树里相应节点的状态。

实现send事件的回调函数

较为简单,全局数组不需要维护,但是内核的epoll实例需要维护。

编写初始化服务器的函数

建立红黑树实例并建立服务器套接字

一共要建立20个服务器套接字。同样的,每成功建立一次,都要维护全局数组和epoll实例。注意套接字描述符的接收数据回调函数选择是accept_cb;

检测就绪状态的fd并处理

根据检测到的事件进行处理,而不是根据文件描述符是服务器套接字还是通信套接字进行处理。值得注意是处理EPOLLIN事件中,虽然代码上调用的都是recv_callback函数,但实际上如果i是服务器套接字,那么调用的依然是accpet_callback。这是因为union特性,union的属性如果都是同一类型,那么进行赋值之后,无论调用哪一个属性都是都可以调用同一个值。

百万并发

  1. 整个过程涉及到一些时间处理的细节,是为了计算服务器处理并发的效率。
  2. 全局数组设置很大,这是为了处理百万并发,不是很科学但是能用。
  3. 百万并发处理一方面体现在三方面,全局数组的大小,epoll模型,服务器套接字的数量。
目录
相关文章
|
1月前
|
存储 SQL 安全
什么是传统的客户端服务器模式架构
什么是传统的客户端服务器模式架构
28 0
|
2月前
|
存储 弹性计算 编解码
ecs实例规格工作负载模式
阿里云ECS实例有多种工作负载模式:计算密集型(适合高性能计算)、内存密集型(适用于内存数据库)、通用型(平衡资源,多场景适用)、大数据型(优化大数据分析)、共享型(低成本,轻负载)和企业级实例(高稳定性和隔离性)。用户依据业务需求选择实例规格,结合SLB和ESS服务可优化架构,应对动态负载。
23 4
|
13天前
|
前端开发 数据处理 API
后端开发:构建稳健与高效的服务器逻辑
后端开发:构建稳健与高效的服务器逻辑
|
2月前
|
弹性计算
阿里云3M带宽云服务器并发多大?阿里云3M带宽云服务器测评参考
在探讨云服务器3M带宽能支持多大并发这一问题时,我们首先要明白一个关键点:并发量并非仅由带宽决定,还与网站本身的大小密切相关。一般来说,一个优化良好的普通网站页面大小可能只有几K,为便于计算,我们可以暂且假定每个页面大小为50K。
840 1
|
8天前
|
弹性计算 供应链
阿里云服务器付费模式包年包月、按量付费、抢占式实例选择说明
阿里云ECS提供包年包月、按量付费和抢占式实例三种计费方式。选择建议:稳定需求选包年包月,动态需求选按量付费,无状态应用选抢占式实例以降低成本。可结合使用按量付费、预留实例券和节省计划以平衡灵活性和成本。需要资源保障则组合按量付费和资源保障。具体详情和规定可参考阿里云ECS官方文档
38 7
|
8天前
|
Prometheus 监控 Cloud Native
构建高效可靠的Linux服务器监控体系
【4月更文挑战第30天】 在维护企业级Linux服务器的稳定性和性能方面,一个周全的监控体系是至关重要的。本文将探讨如何利用开源工具和实践构建一个高效、灵活且用户友好的监控系统。我们将重点讨论核心组件的选择、配置、报警机制以及数据分析方法,旨在帮助读者打造一个能够实时响应并预防潜在问题的监控环境。
|
9天前
|
存储 安全 网络协议
游戏服务器:构建与运行的艺术
游戏服务器:构建与运行的艺术
23 1
|
10天前
|
中间件 Go API
Golang深入浅出之-Go语言标准库net/http:构建Web服务器
【4月更文挑战第25天】Go语言的`net/http`包是构建高性能Web服务器的核心,提供创建服务器和发起请求的功能。本文讨论了使用中的常见问题和解决方案,包括:使用第三方路由库改进路由设计、引入中间件处理通用逻辑、设置合适的超时和连接管理以防止资源泄露。通过基础服务器和中间件的代码示例,展示了如何有效运用`net/http`包。掌握这些最佳实践,有助于开发出高效、易维护的Web服务。
25 1
|
19天前
|
网络协议 网络架构 Windows
解锁远程联机模式:使用MCSM面板搭建我的世界服务器,并实现内网穿透公网访问
解锁远程联机模式:使用MCSM面板搭建我的世界服务器,并实现内网穿透公网访问
|
2月前
|
存储 弹性计算 云计算
9M带宽的阿里云服务器支持多少用户并发访问?阿里云9M带宽服务器测评
随着云计算技术的飞速进步与日益完善,云服务器已经逐渐成为了众多企业与个人的首选服务器类型。它以其出色的弹性扩展、高可用性以及灵活的管理方式,赢得了广大用户的青睐。那么,对于一款拥有9M带宽的云服务器来说,到了2024年,它究竟能够支持多少用户进行并发访问呢?这无疑是许多准备使用云服务的用户非常关心的问题。
149 0