上下文:操作系統:Linux(Ubuntu),語言:C(實際上是Lua,但這應該不重要)。PUB/SUB與短命的發佈者和長期訂閱者
我寧願一個基於ZeroMQ的解決方案,但會接受任何足夠的理智。
注意:由於技術原因,我不能在這裏使用POSIX信號。
我在單臺機器上有幾個相同的長生命過程(「工人」)。
有時我需要通過命令行工具向每個進程發送控制消息。示例:
$ command-and-control worker-type run-collect-garbage
本機上的每個工作人員都應該收到一條run-collect-garbage
消息。 注意:如果解決方案以某種方式適用於羣集中所有機器上的所有工作人員,那將是完美的,但我可以自己編寫該部分。
如果我將存儲有關正在運行的工人的一些信息,這很容易完成。例如,將它們的PID保存在已知位置,並在已知路徑上打開一個控制Unix域套接字,並在其中包含PID。或者打開TCP套接字並在某處存儲主機和端口。
但是,這需要仔細管理存儲的信息 - 例如,如果工人突然死亡怎麼辦? (沒有什麼不可管理的,但仍然是額外的大驚小怪。)另外,信息需要存儲在某個地方,因此增加了一些額外的複雜性。
PUB/SUB風格有沒有很好的方法來做到這一點?也就是說,工作人員是訂戶,指揮和控制工具是一個發佈者,他們所知道的只是一個單一的「渠道網址」,可以這麼說,用來發送消息。
附加要求:
- 消息給控制信道必須從輪詢醒來工人(選擇,無論) 迴路。
- 消息傳遞必須得到保證,並且它必須到達每個正在傾聽的工作人員。
- 工作人員應該有一種方法來監視消息沒有阻塞 - 理想情況下通過上面提到的poll/select/whatever循環。
- 理想情況下,從某種意義上講,工作進程應該是「服務器」 - 他不應該爲保持與「通道服務器」(如果有)持續連接等問題擔憂 - 或者應該由框架透明地完成。
另一個可能有用的東西,我發現當做搜索時,發現我這個問題:http://code.google.com/p/ops/ - 我沒有使用它,因此不能說只要將它添加爲評論,以免發現zmq以任何方式缺乏。 – lindes 2013-10-28 18:49:46