2011-03-14 95 views
0

我必須建立一個心跳系統(即網絡上的一些(大約10個)節點每隔幾秒發送一次定期「心跳」到中心節點)。這些節點是ubuntu機器。那麼你對下列選擇有何建議:我應該使用什麼技術來構建心跳系統?

  • TCP/UDP?
  • 語言/軟件發送消息?
  • 服務器架構 - 多線程或多進程等?

心跳的目的是快速找到任何發生故障的節點,或者節點無法與中央服務器通信。客戶端節點上的性能是一個問題,所以我不想使用java(因爲那需要安裝一個jvm)。 PS:我們以後可能還需要傳遞一些帶有「心跳」信息的文本,所以我們想要開發系統,記住這一點。

+0

怎麼樣,定期坪他們中間節點上的shell腳本? – Tim 2011-03-14 10:10:47

+0

@Tim - 對不起,我應該提到我們可能以後需要發送一些性能指標與消息。此外,ping會通過TCP進行傳輸,這可能並不理想。 – apoorv020 2011-03-14 10:16:20

+0

Ping通過ICMP,而不是TCP。 – 2011-03-14 10:25:51

回答

1

一個非常簡單的單向「ping」應用程序就足夠了。我會在服務器上使用一個UDP套接字,在端口foo上列出傳入消息,並使用單個UDP套接字在每個客戶端發送來自客戶端的「我還活着」消息,其中sendTo以無限循環與sleep 。沒有花哨的線程/進程需要。

您可以通過服務器的地址recvFrom或通過在數據包有效負載中包含客戶端ID來區分服務器上的客戶端。然後,您可以跟蹤每個客戶端上次發送ping命令的時間。您可能需要在服務器上使用多個線程,以便在檢查超時時使用阻止接收。或者使用select和一個小超時/暫停輪詢套接字。

Beej具有優良的指南如何做到這一切在C:http://beej.us/guide/bgnet/output/html/multipage/index.html

相關問題