代码之家  ›  专栏  ›  技术社区  ›  Sasha

模式来实现服务器和客户端之间的心跳

  •  6
  • Sasha  · 技术社区  · 17 年前

    窗口客户端

    • 有一个单独的线程,可以向连接的客户端发送心跳信号

    • (缓慢、快速、客户人满为患、准备就绪)

    我真的很想看看它在实践中是如何做到的,例子是最好的。

    3 回复  |  直到 17 年前
        1
  •  2
  •   DCNYAM    17 年前

    使用Josh提到的pull模型是最简单的方法。首先,您将克服许多安全问题。无需担心客户端防火墙。另外,您不必担心必须在每个客户端上打开相同的端口,或者打开动态端口并通知服务器正在使用哪个客户端上的哪个端口。

    此外,您不必在服务器上维护订户列表。此外,如果客户机以不太干净的方式断开连接(应用程序崩溃、电源故障等),则无需担心清理订户列表。

    基本上,从客户端到服务器上的服务的简单轮询是最简单、最干净的方法,IMHO。我已经用过好几次了。如果您选择,您甚至可以让用户配置轮询间隔。

    编辑:

    基本上,我有一个web服务,当被查询时,它将返回系统的状态。这个web服务显然是在服务器上运行的。启动时,客户机将启动一个单独的线程,该线程将每30秒查询一次web服务,以获取服务器系统的状态。然后,UI将被更新以指示该状态。一旦任务完成,线程将返回睡眠状态30秒。更新时间可通过配置文件进行配置。只要确保捕获错误,这样,如果对服务的请求由于服务器停机以外的原因而失败,整个应用程序就不会崩溃。

        2
  •  2
  •   andersoj    17 年前

    这几乎肯定是矫枉过正,但有一个完整的(而且非常活跃的)学科在研究故障检测器的类别,它们可以提供什么样的保证,以及它们如何实际实现。对于那些想比这个提问者暗示的更进一步的人,请看:

    Book Series - 
    Book Title  - Distributed Computing
    Chapter Title  - On the Impact of Fast Failure Detectors on Real-Time Fault-Tolerant Systems
    First Page  - 354
    Last Page  - 369
    Copyright  - 2002
    Author  - Marcos K. Aguilera
    Author  - Gérard Le Lann
    Author  - Sam Toueg
    DOI  - 10.1007/3-540-36108-1_24
    Link  - http://www.springerlink.com/content/e03yf4etbnle9728
    Book Title  - Distributed Algorithms
    Chapter Title  - Heartbeat: A timeout-free failure detector for quiescent reliable communication
    First Page  - 126
    Last Page  - 140
    Copyright  - 1997
    Author  - Marcos Kawazoe Aguilera
    Author  - Wei Chen
    Author  - Sam Toueg
    DOI  - 10.1007/BFb0030680
    Link  - http://www.springerlink.com/content/dj5n71hl17841416
    

    Introduction to Reliable Distributed Programming ,具有大量优秀的示例代码。

        3
  •  1
  •   JoshBerke    17 年前

    我们在谈论什么样的客户?Windows客户端还是asp.net?这有两种非常普遍的模式。您可以推送或拉取数据。如果你在互联网上遇到防火墙和NAT,推送就不起作用。最后是第三种变体,客户机初始化连接,服务器打开连接,来回发送信息。

    最简单的解决方案是从客户端进行轮询,除非您希望服务器与客户端进行即时通信,否则这是一种方法。心跳并不是即时的交流。

    我没有任何可以分享的例子,但应该有很多。

    推荐文章