11

我有一个客户端-服务器系统,双方都是我编写的,我想在服务器断开/死机时将客户端置于“离线”状态,然后在服务器再次可用时自动将它们恢复为“在线” .

对于第一部分,我侦听通道故障事件并通过将客户端设置为脱机来处理它。然后我开始在服务器上调用一个“ping”服务(每 30 秒),如果它还活着,它只会返回一个 bool。一旦它处于活动状态,客户端就会获取布尔值并切换回在线状态。

这一切正常,我遇到的问题是,当客户端调用 ping 服务并且服务器关闭时,没有发送响应(显然),最终,大约 2 分钟后,我得到一个未找到端点的异常。到这个时候,我已经尝试了 3-4 次以上的 ping,因此正在酝酿 3-4 次异常。

我的问题是,如何更优雅地处理 ping 服务?理想情况下,我想定期调用一项服务,让我知道它是否在线,并立即让我知道它是否在线。

4

1 回答 1

12

那这个呢:

  • 如果您检测到服务器断开连接,请进入“Ping”模式
  • 在“ping 模式”中,您将客户端的“sendTimeout”设置为非常短的时间,例如 2 秒左右,因为您对服务的 Ping 方法的调用应该几乎立即得到响应
  • 一旦您的“Ping”成功运行,您再次重新创建客户端代理并将客户端的“sendTimeout”设置回原始值(默认为 1 分钟 - 取决于对您有意义的内容,15 秒、30 秒 - 随便)

这样,如果您处于“Ping 模式”,您可以快速获得响应(或超时),并且可以快速检测服务的可用性。

于 2009-08-05T18:09:29.957 回答