1

我用 C++ 编写了一个套接字客户端服务器程序。该程序运行良好,我现在要做的是定期检查连接的客户端是否可用。我知道可以在服务器程序中使用 while(true) 循环来完成。但它会使用更多的cpu资源。有没有其他有效的方法来检查客户端的可用性?我听说过一种叫心跳的东西。这对我有帮助吗?有没有其他方法可以做到这一点?

4

2 回答 2

2

根据定义,客户端是“连接的”,它是“可用的”,否则它不会是“连接的”。如果您需要持久连接,只需使用提供持久性的传输协议(如 TCP)并让 TCP 完成其工作。它自己的保持活动和重传定时器已经设置为满足网络特性(如果不是,这是一个系统问题,而不是特定应用程序应该单独管理的问题)。只需发送和接收数据并管理在其中一方离开或无法访问时最终出现的连接错误。

任何状况之下:

  • 不要为了测试而做愚蠢的无限循环发送/接收 empy 消息:互联网上有数十亿个节点:如果有人这样做,整个互联网将被“乒乓球”填满。弯曲宽度是有代价的。远远超过 CPU 和内存。不要浪费它。

  • 不要试图让自己超时或恢复丢失的数据包。您甚至无法想象为什么网络可以决定重新路由或丢弃数据包,有百分之一的充分理由。让 TCP 和 IP 始终如一地发挥作用。所有试图自行解决网络问题的应用程序都只会给网络管理员带来麻烦。

  • 简而言之:如果套接字打开并且没有错误,则计算机已连接。如果它出错,只需将其关闭并尝试重新打开它(并等待传输协议超时。它可能长达几分钟,但不要试图逃避网络协议规则:你在网络中独自一人,而不是你可以制定这些规则)。

于 2013-01-15T10:01:13.410 回答
0

为什么不及时触发主事件而不是无限循环?

我从某人那里听说,现代 MB 架构和内存设计可以通过应用具有某些特殊性的缓存方法来实现可重用性,从而消除分配和重新分配内存块的需要,这也有助于避免在外部和内部创建过多的片段。我不介意再次检查这个,因为我现在正在听我的在线教授的在线采访......:D。祝您搜索顺利!

[编辑]我及时使用ping方法阅读了其他回复ongard,这非常好,但请注意客户端也可以阻止来自其他计算机的ping。

于 2013-01-15T09:43:21.147 回答