东阳的学习笔记
有了 Connector、TcpClient就不难实现了,它的代码和 TcpServer 甚至有几分相似(都有 newConnection 和 removeConnection()这两个成员函数),只不过每个TcpClient只管理一个 TcpConnection
。代码从略。
一、要点
- TcpClient 具备 TcpConnection
断开之后重新连接
的功能,加上 Connector 具备反复尝试连接的功能,因此客户端与服务端之间的启动先后无所谓。 - 连接断开后初次重试的延迟应该有随机性。因为若同时发起连接,容易:
- 可能造成 SYN 丢包
- 可能给服务器带来短期大负载,影响服务质量
- 发起连接的时候若发生TCP SYN 丢包,那么系统默认的重试间隔是 3s,这期间不会返回错误码。这个间隔不容易修改。如果需要缩短间隔,那么可以使用定时器在0.5s 或 1s 后
发起另一次连接
。如果有这个需求,可以做到 Connector 中 - 目前的TcpClient没有充分测试动态增减的情况,也就是说:
- 没有充分测试 TcpClient 的生命期比 EventLoop 短的情况
- 特别好是,没有充分测试 TcpClient 在
连接建立期间析构的情况