2011-05-03 23 views
2

我正在編寫用C/C++編寫的客戶端/服務器應用程序。它主要是C與一些C++功能 - 我來自C和Java世界,並沒有使用大量的高級C++語言功能。在任何情況下,服務器都駐留在一臺計算機上並進行各種內部計算,並且每天幾次(在不可預知的時間),它會將信息廣播給已註冊到服務器的一些客戶端(駐留在其他計算機上)聽這樣的廣播消息。服務器必須能夠以100%的可靠性和非常快的速度向所有註冊的客戶端進行廣播,以便客戶端可以更新自己的內部數據以反映服務器中的狀態變化 - 服務器剛剛向他們廣播的狀態變化。由於它必須可靠,它必須是TCP/IP,而不是UDP。C/C++中的簡單廣播庫/示例

這似乎是一個非常標準的C++網絡架構,但我想找到一個好的庫,它可以讓我輕鬆地做到這一點(WinSock庫的某種包裝,以便我可以輕鬆地做到這一點在Windows上,而不必深入到WinSock的具體怪癖)以及一個簡單的例子,說明如何做這種事情。

謝謝。

+0

請將標記廣播更改爲組播 - 它不適用於問題 – Ulterior 2011-07-07 23:22:49

回答

2

結賬boost::asio。他們的例子可以在這裏找到:http://www.boost.org/doc/libs/1_38_0/doc/html/boost_asio/examples.html

它提取了大多數平臺特定的怪癖,所以你可以快速開展業務。

+0

我在生產中使用了asio很多,這是非常棒的庫。你只需要記住只將它包含在你需要的文件中,並且只包含你需要的部分 - asio增加了很多編譯時間(在我的系統中爲每個使用它的cpp文件+ 2s)。 – 2011-05-03 17:51:58

+0

Boost的開銷太多,而且學習曲線太陡。我正在尋找更輕量級的東西。也許我需要比TCP更高級別的協議來確保可靠性?建議? – Marc 2011-05-03 18:15:49

1

有兩個來自自由和開放源代碼世界的C/C++網絡通信庫 - 搖滾-LibEventBoost.Asio。使用它們,您不需要深入瞭解操作系統的具體情況或網絡通信的特定API。他們都有一個很好的文檔和一套體面的examples

附註:即使使用TCP/IP,也不能使通信協議從更高的角度來看是可靠的。爲了提供可靠性,應用程序通常在TCP/IP之上定義更高級別的協議。這些協議描述消息的排序,心跳,重傳支持等。也有建立在UDP之上的可靠協議(所謂的RUDP)。

如果您覺得速度和可靠性非常重要,您可能需要使用行業領先的技術之一,如Tibco,LBM(Informatica/29West)或Tervela。所有這些解決方案都可以在不同的通信協議之上工作,同時爲用戶提供無縫的API。

+0

而這位貶低選民認爲呢?... – 2011-05-03 17:53:41

+0

你在可靠性上提出了一個很好的觀點。我很高興使用確保可靠性的高級協議 - 例如如果套接字在某個時候被丟棄(因爲幾個小時內沒有發生任何事情),我希望它自動爲我重新連接/處理這個問題。你會建議什麼高層次的協議以及Windows庫如何實現? – Marc 2011-05-03 18:14:33

+0

我知道的唯一免費/開源的供應商是ZeroC Ice(zeroc.com)。他們的解決方案與純粹的消息傳遞有點不同,它更像CORBA。它們支持自動連接重建(事實上,如果不使用它,它們不會保持活動狀態,但可以選擇性地關閉它),除非使用單向調用,否則它們是可靠的。 – 2011-05-03 18:29:01

0

這需要相當數量的C++特性(模板等),但boost::asio非常好,正是您需要的任務。然而,它顯然需要一些習慣,因爲編程模型與直接的C++完全不同。網站上有非常好的文檔和大量示例。

+0

我聽說增加開銷巨大,學習曲線陡峭。我希望除了Boost以外的其他東西。 – Marc 2011-05-03 18:08:54

+0

提升開銷和學習曲線都非常合理。使用提升的好處遠遠超過成本。 – 2011-05-03 18:14:24