2012-04-19 59 views
1

我有一個執行計算繁重的本地處理的程序。計算包具有16MiB輸入緩衝區,並可產生10KB至16MiB的輸出。這一切都發生在多線程環境中。爲對等系統編寫C++客戶端/服務器的最佳RPC包是什麼?

我有許多計算機綁定的用戶。我有興趣增加對點對多處理的支持。也就是說,客戶端將在組織中的多臺計算機上運行。主人會找到可用的客戶端,向他們發送16MiB緩衝區,然後獲得結果。

主人將有一個可用客戶端的列表。然後它會向每個客戶發送一條消息,表明它是免費的。客戶端將爲他們擁有的每個核心啓動一個線程。每個線程都會詢問主機的工作緩衝區,計算結果,然後將結果發送給主機。大師將把來自每個客戶的結果合併到最終輸出中。

一個典型的運行涉及100到50000個16MiB緩衝區之間的運算。輸出通常在100MB到10GB的範圍內。緩衝區之間沒有數據依賴關係。

我正在尋找安排客戶端和服務器之間通信的最佳方式。我的計劃是使用某種RPC。我不想在客戶端或服務器中嵌入Web服務器。相反,我的計劃是隻需在TCP套接字上接收連接,並擁有某種基本的RPC。

這裏是我考慮的選項:

  1. 我可以角色我自己的客戶機/服務器系統和使用協議緩衝區把整個事情。
  2. 我可以使用現有的RPC systems for potocol buffers之一。
  3. 我可以嵌入Web服務器並使用XMLRPC。

實現語言是C++。該程序針對Linux,MacOS和Windows的mingw編譯。

謝謝。

+0

你的問題是什麼?無論如何,'protobuf'是C++編碼的好選擇,XML是一個糟糕的選擇。 RPC是一個(潛在的)安全漏洞。只需在消息中包含一個表示「應該完成什麼樣的處理」的字段,而不是嘗試傳遞要在遠程端查找的函數名稱。 – 2012-04-19 23:19:01

+0

此外,由於這是大量要傳輸的數據,因此您可能需要將傳輸序列化到多線程客戶端,以便一個線程可以在剩餘工作項傳輸時開始工作,而不是將您的帶寬分割爲多個項目。 – 2012-04-19 23:21:18

+0

我的問題是「爲對等系統編寫C++客戶端/服務器的最佳RPC軟件包是什麼?」 – vy32 2012-04-19 23:45:25

回答

0

我們發現0MQ符合我們的標準。

相關問題