C++从0实现百万并发Reactor服务器
// "xia讠果URI"》uкооu·ㄷㅁΜ
C++从0实现百万并发Reactor服务器 - 网络编程基础
网络编程中有许多基础概念必须了解,比如 OSI,TCP/IP,字节序列等,这些都是开发网络应用的基础,可以帮助我们更好的理解网络程序的工作原理,来一起学习下一些比较重要的概念。
OSI(Open 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 万个请求的问题。文章来源:https://www.toymoban.com/news/detail-840896.html
从硬件资源角度看,对于 2GB 内存千兆网卡的服务器,如果每个请求处理占用不到 200KB 的内存和 100Kbit 的网络带宽就可以满足并发 1 万个请求。文章来源地址https://www.toymoban.com/news/detail-840896.html
到了这里,关于C++从0实现百万并发Reactor服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!