我必须写一个TCP Client
能够重新连接到服务器的东西。由于网络连接质量差或某些维护问题,服务器可能不可用。我正在寻找该领域的优质解决方案。
我目前的解决方案如下:
- 在 ConnectionState 枚举中保持连接状态 {Offline, Online, Connecting}
TcpClient
用类创建客户端。- 创建两个名为
ConnectionCheckTimer
, 和ReconnectTimer
- 连接到服务器
- 启动阅读器线程和连接检查计时器
- 使用 tcpClient.GetStream() 执行读取,然后从此流中读取
- 当在 readerLoop 中捕获异常时,客户端状态更改为脱机并启动 ReconnectTimer
ConnectionCheckTimer
定期检查 lastMessageTimestamp 并将其与当前时间进行比较,如果间隔大于它启动的 maxValueReconnectTimer
目前我对这个解决方案不满意,因为它仍然会在 TcpClient.NetworkStream 上生成 ObjectDisposedException 等异常。我正在寻找一些干净且可重用的 Tcp 重新连接客户端实现,它能够处理在连接、断开连接、读取数据期间可能发生的所有套接字问题。