C++从0实现百万并发Reactor服务器

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

C++从0实现百万并发Reactor服务器,服务器,运维

C++从0实现百万并发Reactor服务器

// "xia讠果URI"》uкооu·ㄷㅁΜ

C++从0实现百万并发Reactor服务器 - 网络编程基础

网络编程中有许多基础概念必须了解,比如 OSI,TCP/IP,字节序列等,这些都是开发网络应用的基础,可以帮助我们更好的理解网络程序的工作原理,来一起学习下一些比较重要的概念。

OSIOpen System Interconnection)是国际标准化组织(ISO)制定的计算机互联的标准,是设计和描述计算机网络通信的基本框架。OSI 模型把网络通信分为 7 层 TCP/IP 协议没有表示层和会话层,其中每层对应到 OSI 的协议主要有下面这些:

  • 应用层:TFTP,HTTP,FTP 等
  • 传输层:TCP,UDP
  • 网络层:IP,IGMP 等
  • 数据层:MTU 等
  • 物理层:ISO 2110,IEEE802 等

TCP/IP 协议基础

TCP/IP 包含许多协议,比如 TCP,UDP,IP,HTTP,FTP 等,平常上网都会使用到它们,必须要了解些概念:

  • TCP(Transport Control Protocol):传输控制协议
  • UDP(User Datagram Protocol):用户数据报协议
  • IP(Internetworking Protocol):网间协议
  • HTTP(Hypertext Transfer Protocol):超文本传输协议
  • FTP(File Transfer Protocol):文本传输协议

C++从0实现百万并发Reactor服务器 IO多路复用

在改进网络 I/O 模型前,我先来提一个问题,你知道服务器单机理论最大能连接多少个客户端?

相信你知道 TCP 连接是由四元组唯一确认的,这个四元组就是:本机IP, 本机端口, 对端IP, 对端端口

服务器作为服务方,通常会在本地固定监听一个端口,等待客户端的连接。因此服务器的本地 IP 和端口是固定的,于是对于服务端 TCP 连接的四元组只有对端 IP 和端口是会变化的,所以最大 TCP 连接数 = 客户端 IP 数×客户端端口数

对于 IPv4,客户端的 IP 数最多为 2 的 32 次方,客户端的端口数最多为 2 的 16 次方,也就是服务端单机最大 TCP 连接数约为 2 的 48 次方

这个理论值相当“丰满”,但是服务器肯定承载不了那么大的连接数,主要会受两个方面的限制:

  • 文件描述符,Socket 实际上是一个文件,也就会对应一个文件描述符。在 Linux 下,单个进程打开的文件描述符数是有限制的,没有经过修改的值一般都是 1024,不过我们可以通过 ulimit 增大文件描述符的数目;
  • 系统内存,每个 TCP 连接在内核中都有对应的数据结构,意味着每个连接都是会占用一定内存的;

那如果服务器的内存只有 2 GB,网卡是千兆的,能支持并发 1 万请求吗?

并发 1 万请求,也就是经典的 C10K 问题 ,C 是 Client 单词首字母缩写,C10K 就是单机同时处理 1 万个请求的问题。

从硬件资源角度看,对于 2GB 内存千兆网卡的服务器,如果每个请求处理占用不到 200KB 的内存和 100Kbit 的网络带宽就可以满足并发 1 万个请求。文章来源地址https://www.toymoban.com/news/detail-840896.html

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

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

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

相关文章

  • 基于多反应堆的高并发服务器【C/C++/Reactor】(中)Channel 模块的实现

    在这篇文章中虽然实现了能够和多客户端建立连接,并且同时和多个客户端进行通信。 基于多反应堆的高并发服务器【C/C++/Reactor】(上)-CSDN博客 https://blog.csdn.net/weixin_41987016/article/details/135141316?spm=1001.2014.3001.5501 但是有一个 问题(O_O)? : 这个程序它是单线程的。如果我们想

    2024年02月03日
    浏览(58)
  • 用反应器模式和epoll构建百万并发服务器

    此处的百万并发指的是可以建立至少100w个客户端连接,不考虑业务处理。 反应器模式下的epoll相比起普通的epoll不同在于:普通的epoll在获取到就绪状态的event结构体之后,先判断是什么类型的fd,再进行操作。而reactor先判断是什么类型的事件,再进行操作。本文从头用react

    2024年02月02日
    浏览(71)
  • 基于多反应堆的高并发服务器【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)
  • 基于多反应堆的高并发服务器【C/C++/Reactor】(中)EventLoop初始化和启动

    (一)详述 EventLoop  这个 Dispatcher 是一个事件分发模型,通过这个模型,就能够检测对应的文件描述符的事件的时候,可以使用 epoll/poll/select ,前面说过三选一。另外不管是哪一个底层的检测模型,它们都需要使用一个数据块,这个数据块就叫做 DispatcherData 。除此之外,还有另外一

    2024年01月23日
    浏览(67)
  • 基于多反应堆的高并发服务器【C/C++/Reactor】(中)HttpRequest模块 解析http请求协议

    一、HTTP响应报文格式 二、根据解析出的原始数据,对客户端的请求做出处理  processHttpRequest  1.解码字符串   解决浏览器无法访问带特殊字符的文件得到问题 2.判断文件扩展名,返回对应的 Content-Type(Mime-Type) 3.发送文件  sendFile 4.发送目录 三、解析http请求协议  parseHttpR

    2024年02月02日
    浏览(54)
  • 基于多反应堆的高并发服务器【C/C++/Reactor】(中)在TcpConnection 中接收并解析Http请求消息

    一、在TcpConnection 中多添加和http协议相关的request和response 二、给客户端回复数据(方法一) 1.在 Buffer.h 文件中添加 bufferSendData 函数:  2.在 TcpConnection.c 文件中添加 processWrite 函数: 3.修改 tcpConnectionInit 函数中调用的 channelInit函数 的写回调函数为 processWrite函数 三、给客户端

    2024年01月23日
    浏览(51)
  • 基于epoll实现Reactor服务器

    在我们调用epoll_create的时候会创建出epoll模型,这个模型也是利用文件描述类似文件系统的方式控制该结构。 在我们调用epoll_create的时候,就会在内核管理中创建一个epoll模型,并且建管理模块地址给file结构体,file结构体也是连接在管理所有file结构体的数据结构中 所以epo

    2024年02月20日
    浏览(44)
  • 基于多反应堆的高并发服务器【C/C++/Reactor】(中)在EventLoop中处理被激活的文件描述符的事件

    文件描述符处理与回调函数 一、主要概念 反应堆模型:一种处理系统事件或网络事件的模型,当文件描述符被激活时,可以检测到 文件描述符:在操作系统中,用于标识打开的文件、套接字等的一种数据类型  处理激活的文件描述符的函数:当文件描述符被激活时,需要有

    2024年02月03日
    浏览(48)
  • 一、C++项目:仿muduo库实现高性能高并发服务器

    仿mudou库one thread oneloop式并发服务器实现 仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器: 通过实现的高并发服务器组件,可以简洁快速的完成一个高性能的服务器搭建。并且,通过组件内提供的不同应用层协议支持,也可以快速完成一个高性能应用服务器的搭建

    2024年02月07日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包