大概在紅寶石做IPC的最簡單的方法是通過drb和使用Queue
,它位於thread
:
require 'thread'
queue = Queue.new # provides blocking read
注意,使用DRB時,你會希望有附近的下面一行您的程序頂部:
Socket.do_not_reverse_lookup=true;
沒有它,事情運行速度非常緩慢(source)。
要解決問題中描述的特定問題,您可以創建一個Pipe
類,其實質上只有兩個Queue
對象,一個用於收件箱,一個用於發件箱。 Queue
的阻止讀取行爲可以讓進程輕鬆地等待對方。 Pipe
通過drb
在兩個過程之間共享。
服務器啓動代碼可能是這樣的:
require 'drb'
Socket.do_not_reverse_lookup=true;
uri = "druby://localhost:2250" # you can pick a port to communicate on
pipe = Pipe.new
DRb.start_service uri, pipe
客戶端啓動代碼看起來像:
require 'drb'
Socket.do_not_reverse_lookup=true;
uri = "druby://localhost:2250"
DRb.start_service
pipe = DRbObject.new nil, uri
現在,客戶端和服務器可以通過Pipe
對象溝通。
來源
2011-02-14 08:35:25
dsg
是否有任何理由這些必須是2個獨立的腳本?我想不出有這個理由。這些做什麼? – 2011-02-13 07:42:06