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

这篇具有很好参考价值的文章主要介绍了用反应器模式和epoll构建百万并发服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

导入相关的包并设置宏

如何设计一个支持百万并发的服务器,服务器,javascript,linux

声明事件处理函数

如何设计一个支持百万并发的服务器,服务器,javascript,linux

构建存储数据结构

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

如何设计一个支持百万并发的服务器,服务器,javascript,linux

编写epoll实例的维护函数

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

如何设计一个支持百万并发的服务器,服务器,javascript,linux

实现accept事件的回调函数

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

如何设计一个支持百万并发的服务器,服务器,javascript,linux

实现recv事件的回调函数

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

如何设计一个支持百万并发的服务器,服务器,javascript,linux

实现send事件的回调函数

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

如何设计一个支持百万并发的服务器,服务器,javascript,linux

编写初始化服务器的函数

如何设计一个支持百万并发的服务器,服务器,javascript,linux

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

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

如何设计一个支持百万并发的服务器,服务器,javascript,linux

检测就绪状态的fd并处理

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

如何设计一个支持百万并发的服务器,服务器,javascript,linux文章来源地址https://www.toymoban.com/news/detail-781471.html

百万并发

  1. 整个过程涉及到一些时间处理的细节,是为了计算服务器处理并发的效率。
  2. 全局数组设置很大,这是为了处理百万并发,不是很科学但是能用。
  3. 百万并发处理一方面体现在三方面,全局数组的大小,epoll模型,服务器套接字的数量。

到了这里,关于用反应器模式和epoll构建百万并发服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • epoll实现并发服务器

    epoll 是Linux操作系统提供的一种事件通知机制,用于高效处理大量文件描述符上的事件。它是一种基于内核的I/O事件通知接口,可以用于实现高性能的并发服务器和异步I/O操作。 与传统的事件通知机制(如 select 和 poll )相比, epoll 具有更高的性能和扩展性。它采用了一种基

    2024年02月09日
    浏览(55)
  • epoll并发服务器的实现

    1.实现并发通信的三种方式 ​ 实现并发通信主要有三种方式: 多进程服务器 、 多路复用服务器 (I/O复用)、 多线程服务器 多进程服务器 ​ 多进程服务器指的是利用不同进程处理来自不同客户端发来的连接请求,进程之间以轮转的方式运行,由于各个进程之间轮转运行的时

    2024年02月03日
    浏览(60)
  • epoll多路复用_并发服务器

    应用程序: 驱动程序:

    2024年02月15日
    浏览(58)
  • 2023.7.30(epoll实现并发服务器)

    服务器 客户端

    2024年02月14日
    浏览(45)
  • 2.2.1服务器百万并发实现

    Reactor模型的几个重要组件:Event事件、Reactor反应堆、Demultiplex事件分发器、Evanthandler事件处理器 接上节课,上节课中,我们使用了epoll实现了同时监听多个文件描述符,是对IO的管理,也提到了reactor是对事件的管理,那具体来说是怎样的呢?reactor是事件驱动模型,也就是EP

    2023年04月23日
    浏览(54)
  • C++从0实现百万并发Reactor服务器

    C++从0实现百万并发Reactor服务器 // \\\"xia讠果URI\\\"》uкооu·ㄷㅁΜ C++从0实现百万并发Reactor服务器 - 网络编程基础 网络编程中有许多基础概念必须了解,比如 OSI,TCP/IP,字节序列等,这些都是开发网络应用的基础,可以帮助我们更好的理解网络程序的工作原理,来一起学习下一些

    2024年03月17日
    浏览(74)
  • TCP高并发服务器简介(select、poll、epoll实现与区别)

    一、创建套接字(socket函数): 二、填充服务器的网络信息结构体: 三、套接字和服务器的网络信息结构体进行绑定(bind函数): 四、套接字设置成被动监听(listen函数): 五、创建要监听的文件描述符集合: 使用select函数后,会将 没有就绪的文件描述符 在集合中 去除

    2024年01月19日
    浏览(56)
  • C/S架构学习之使用epoll实现TCP特大型并发服务器

    epoll实现TCP特大型并发服务器的流程: 一、创建套接字(socket函数): 通信域 选择 IPV4 网络协议、套接字类型选择 流式 ; 二、填充服务器和客户机的网络信息结构体: 1.分别定义服务器网络信息结构体变量 serveraddr 和客户机网络信息结构体变量 clientaddr ; 2.分别求出服务

    2024年02月08日
    浏览(52)
  • 基于多反应堆的高并发服务器【C/C++/Reactor】(中)完整代码

    Buffer.h Buffer.c Channel.h Channel.c ChannelMap.h ChannelMap.c Dispatcher.h EpollDispatcher.c  PollDispatcher.c SelectDispatcher.c EventLoop.h EventLoop.c HttpRequest.h HttpRequest.c   HttpResponse.h HttpResponse.c TcpConnection.h TcpConnection.c TcpServer.h TcpServer.c ThreadPool.h ThreadPool.c WorkerThread.h WorkerThread.c

    2024年01月20日
    浏览(67)
  • 基于多反应堆的高并发服务器【C/C++/Reactor】(下)重构Channel类

    一、C语言 Channel.h Channel.c 二、C++ Channel.h Channel.cpp  

    2024年01月21日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包