用反应器模式和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月前
|
Java 关系型数据库 API
探索后端技术:构建高效、可靠的服务器端应用
在当今数字化时代,后端技术是任何成功应用程序的基石。它涉及服务器、数据库和应用程序之间的交互,处理数据存储、业务逻辑和系统性能等关键任务。本文将深入探讨后端开发的核心概念、常见技术栈及其实际应用,帮助读者更好地理解和掌握构建高效、可靠后端系统的技巧与策略。
|
28天前
|
监控 中间件 Java
后端技术:构建高效、稳定的服务器端应用
【10月更文挑战第5天】后端技术:构建高效、稳定的服务器端应用
67 0
|
1月前
|
监控 关系型数据库 Serverless
探索后端技术:构建高效、可靠的服务器端应用
本文将深入探讨后端开发的核心概念和关键技术,从服务器架构到数据库管理,再到安全防护,为读者提供全面的后端技术指南。无论是初学者还是经验丰富的开发者,都能从中汲取灵感,提升自己的技术水平。
|
9天前
|
关系型数据库 API 数据库
后端开发的艺术:从零到一构建高效服务器
在数字化时代,后端开发是支撑现代互联网应用的基石。本文旨在探讨后端开发的核心概念、关键技术以及如何构建一个高效的服务器。我们将从基础的编程语言选择开始,逐步深入到数据库设计、API开发和性能优化等关键领域。通过实际案例分析,我们将揭示后端开发的复杂性和挑战性,同时提供实用的解决方案和最佳实践。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和启发。
|
29天前
|
消息中间件 分布式计算 监控
大数据-78 Kafka 集群模式 集群的应用场景与Kafka集群的搭建 三台云服务器
大数据-78 Kafka 集群模式 集群的应用场景与Kafka集群的搭建 三台云服务器
59 6
|
30天前
|
SQL 存储 数据管理
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
51 2
|
30天前
|
JSON JavaScript 前端开发
使用 Node.js 和 Express 构建 RESTful API 服务器
【10月更文挑战第3天】使用 Node.js 和 Express 构建 RESTful API 服务器
|
1月前
|
Web App开发 JavaScript 前端开发
使用Node.js和Express框架构建Web服务器
使用Node.js和Express框架构建Web服务器
|
2月前
|
存储 关系型数据库 API
深入理解后端技术:构建高效、可扩展的服务器端应用
本文将探讨后端开发的核心概念和技术,包括服务器端编程、数据库管理、API设计和安全性等方面。通过深入浅出的方式,让读者了解如何构建高效、可扩展的后端系统。我们将从基本的后端框架开始,逐步深入到高级主题,如微服务架构和容器化部署。无论您是初学者还是有经验的开发人员,都能在本文中找到有价值的信息和实用的建议。
|
21天前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API服务器
【10月更文挑战第12天】使用JavaScript和Node.js构建简单的RESTful API服务器
14 0