结构体类型
结构体(structure,简称 struct)是一种用户自定义的数据类型,用于将多个不同类型的数据组合在一起。它允许在一个单一的单元中存储多个相关的数据项,使代码更具组织性和可读性。
字节序处理和消息队列的控制
在计算机网络中,由于不同的计算机使用的 CPU 架构和字节顺序可能不同,因此在传输数据时需要对数据的字节序进行统一,以保证数据能够正常传输和解析。这就是网络字节序的作用。
类型推导和别名
类型别名(type alias)是一个名字,它是某种类型的同义词。使用类型别名有很多好处,它让复杂的类型名字变得简单明了、易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的。
有两种方法可用于定义类型别名。传统的方法是使用关键字typedef:
处理粘包问题
当客户端发送多个数据包给服务器时,服务器底层的tcp接收缓冲区收到的数据为粘连在一起的。比如,当客户端发送两个Hello World!给服务器,服务器TCP接收缓冲区接收了两次,一次是Hello World!Hello, 第二次是World!。
const用法
const 是 C++ 关键字,用于指示变量的值不可修改。通过使用 const,可以提高代码的安全性与可读性,防止无意中修改变量的值。
封装发送队列
将Server修改为CServer并分离到CServer.h中,然后将Session修改为CSession分离到CSession.h中。CSession.h中类的声明如下,和之前的Session内容一样,就是修改了类名,放在CSession.h中
指针类型
在C++中,指针是一种特殊的变量,它存储的是另一个变量的内存地址,而不是数据本身。通过使用指针,我们可以直接访问和操作内存中的数据。指针也叫做地址。
利用C11模拟伪闭包实现连接的安全回收
我们可以通过智能指针的方式管理Session类,将acceptor接收的链接保存在Session类型的智能指针里。由于智能指针会在引用计数为0时自动析构,所以为了防止其被自动回收,也方便Server管理Session,因为我们后期会做一些重连踢人等业务逻辑,我们在Server类中添加成员变量,该变量为一个map类型,key为Session的uid,value为该Session的智能指针。
extern的作用
前文我们说过头文件只能用来做文件的声明,源文件用来做文件的实现。如果我们在头文件中定义变量会怎么样呢?
假设我们在global.h中定义了两个变量
引用类型
内置类型是C++语言自带的基本数据类型,主要包括以下几种:







