- 心跳包:
- 就是个普通的数据包,就是消息码不同而已;一般每隔几十秒(30s),客户端主动把心跳包返回给客户端,服务端收到了,返回一个心跳包。
- 如果客户端不发,服务器会怎样?=》在约定的时间*3(90s)后,关闭socket连接
- 所以如果客户端发了心跳包,90s后没有接收到,就应该主动关闭连接,并尝试再次连接
- 也叫ping包,心跳包一般不需要包体
- 遗漏问题:
- 收到太多数据处理不过来:
- epoll技术限速,在epoll红黑树节点中,把epoll【可读】通知干掉
- 增加处理线程
- 积压太多发送不过来:
- 服务器干掉一些要发送的数据(客户端崩,总比服务器崩要好)
- 服务器检查客户端是否只发包,不收包(一个int接收到了 int++,发送成功了 int--)
- 收到太多数据处理不过来:
- 性能优化:
- 绑定cpu
- 一个进程运行在一个核上,nginx有这个函数【cpu亲和性】。(cpu核数=进程数)
- 为啥绑定好呢?cpu缓存行,一下在这个核运行,一下又在另一个核上运行(此时缓存失效)。
- 但如果进程数就是大于cpu核数呢? =》三级缓存,cpu所有核的共享缓存
- 提升进程优先级 =》分配到更多的cpu时间片
- 绑定cpu
- 消息的跳跃发送:
- 比如张三的接收缓冲区满了,就得跳过发李四的。
- 其实指的是跳过张三的包2发张三的包3
Linux C++通讯架构【七】:服务器完善
最新推荐文章于 2024-08-14 20:23:13 发布