2013-04-05 101 views
0

我一直在與DRb一起玩,用作我的解決方案來跨多個進程進行通信。我使用stardard進程:創建一個服務,將其註冊到druby uri,在另一個進程上創建一個引用該URI的DRbObject。到現在爲止還挺好。比方說,我殺了第一個進程。對遠程對象的每個後續方法調用都將以ECONNRefused異常爲終點。這只是公平的。但是沒有辦法查看DRbObject是否確實註冊在給定的URI中?我想通過強制每個實例的ECONNRefused來檢測它是否存在有點愚蠢。DRb:如何檢查遠程對象是否存在?

當然,其他涉及DRb以外的資源的解決方案總是受歡迎的,只要它們確實代表了一個優點。

回答

0

您應該檢出ZeroMQ。設置比DRb要複雜一些,但它主要透明地處理所有的存在/重新連接問題。

+0

消息隊列並不是解決我所遇到的小問題的方案,它最適合使用DRb。我想通過流程共享對象,但不能完全傳遞消息,我可以通過多種方式傳遞MQ。 – ChuckE 2013-04-17 14:33:01

+0

不要低估ZeroMQ名字中Zero的威力。一探究竟。我有這樣的感覺,你認爲管理一個消息隊列繁瑣的服務器進程_a la_ RabbitMQ。 ZMQ是嵌入在Ruby腳本中的一個小型庫。非常像DRb,但沒有連接管理的麻煩。我曾經愛過DRB,特別是Rinda,但現在我發現了ZMQ,我懷疑我會再次接受DRb的壓力連接問題。 – 2013-04-17 17:23:35

0

這可能不是您要查找的內容,但我已經在DRb之上開發了一個IPC框架,該框架隱藏了應用程序級別的所有DRb內容。這包括客戶端方法來查找通過網絡向服務器註冊的任何服務。對你來說可能是太多的開銷,但也許值得一試。無論如何,你可以在Github上查看。