簡體   English   中英

用於在服務器和客戶端之間實現心跳的模式

[英]Pattern to implement heartbeat between server and the client

我想在服務器中實現一個心跳功能,該功能會定期向窗口客戶端提醒其活躍度。 我正在考慮的想法很少,但會很感激建議和例子/參考

  • 有一個單獨的線程,可以發送心跳到連接的客戶端

  • 有不同類型的心跳來指示服務器的不同狀態(緩慢,快速,不堪重負的客戶端,up和ready)

  • 也許讓客戶訂閱不同級別,默認發送心跳

我真的很想看看它在實踐中是如何完成的,例子是最好的。

編輯1客戶端和服務器不是基於Web的! (服務器可能會遷移到Web,但我認為它不應該更改協議)

使用Josh提到的拉模型是最簡單的方法。 首先,你會遇到很多安全問題。 無需擔心客戶端防火牆。 此外,您無需擔心必須在每個客戶端上打開相同的端口,或打開動態端口並通知服務器有關正在使用的客戶端上的端口。

此外,您不必在服務器上維護訂戶列表。 此外,如果客戶端以不太干凈的方式(應用程序崩潰,電源故障等)斷開連接,您將無需擔心清理訂戶列表。

基本上,從客戶端到服務器上的服務的簡單輪詢是最簡單和最干凈的方法,恕我直言。 我已經好幾次使用它了。 如果選擇,您甚至可以使用戶可配置輪詢間隔。

編輯:

雖然我無法提供參考或示例代碼,但我將描述我過去所做的事情。

基本上,我有一個Web服務,當查詢時,它將返回系統的狀態。 這個Web服務顯然在服務器上運行。 客戶端在啟動時將啟動一個單獨的線程,該線程每30秒查詢一次Web服務以獲取服務器系統的狀態。 然后,UI將被更新以指示該狀態。 一旦該任務完成,該線程將重新進入休眠狀態30秒。 更新時間可通過配置文件進行配置。 只需確保捕獲錯誤,以便如果服務請求因服務器關閉以外的原因而失敗,則整個應用程序不會崩潰。

這幾乎肯定是矯枉過正,但是有一整套(並且非常生動)的學科正在研究故障探測器的類別,它們可以提供什么樣的保證,以及它們如何實際實施。 對於那些想要比這個提問者暗示更進一步的人,請看看:

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

此外,問題還不清楚,但如果所討論的語言是Java,那么這個主題的優秀資源是: 可靠的分布式編程簡介 ,有很多優秀的示例代碼。

我們在談論什么樣的客戶? Windows客戶端還是asp.net? 這有兩種非常普遍的模式。 您可以推送或拉取數據。 如果您在互聯網上遇到防火牆和nat,推送不起作用。 因此,您最終得到第三個變體,其中客戶端啟動連接,服務器保持連接打開以來回發送信息。

您需要提供更多信息,我們是在談論互聯網還是內部網? 您定位的.net框架是什么? 你在說幾個客戶? 可以處理十幾個客戶端的解決方案(特別是在推送模型或第三個模型中)可能與可擴展到數千個客戶端的解決方案看起來非常不同。

最簡單的解決方案是從客戶端進行輪詢,除非您希望服務器與客戶端進行即時通信,否則這樣做是可行的。 心跳不是即時溝通。

編輯

好的,你指的是套接字,你真的確定要做更低級別的網絡類型編程嗎? 為什么不建立在現有的網絡策略上,比如HTTP。 您可以通過HTTP執行簡單的遠程服務,以便繞過防火牆。 或者甚至更好,如果您的服務器是一個Web服務器,那么只需設置一個普通的舊xml服務。

我沒有任何可以分享的例子,但應該有很多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM