chenshuo / muduo

Event-driven network library for multi-threaded Linux server in C++11
https://github.com/chenshuo/muduo
Other
14.7k stars 5.15k forks source link

当服务端快速重启时 客户端得链接判断链接还是建立的 #524

Closed xluckly closed 2 years ago

xluckly commented 3 years ago

当服务端快速重启时 connected()返回true 但是当前链接已经不可用了 怎么解决下

chenshuo commented 3 years ago

我想先弄明白你具体要解决什么问题。

  1. 任何时候,服务端重启之后,客户端的 connected() 至少要在几十微秒到几十毫秒(取决于网络延迟)之后才能从 true 变成 false。在这期间,连接已经不可用了,你发的数据不会被服务端收到。极端一点,你在连接刚刚建立,connected() 返回 true 之后立刻发送数据,也不一定保证能被服务端收到。这是 TCP 网络通信的本质决定的。你如果想要克服这个困难,需要实现应用层的心跳及应答协议。
  2. 你强调“服务端快速重启”,如果跟正常重启有区别,请明确说明。如果“服务端快速重启”导致客户端的 connected() 一直是 true,那说明网络库有 bug,值得描述复现步骤及修复。