2012-07-28 65 views
1

我剛剛學會了DRb並與之建立了聊天系統。我這裏還有代碼:使用ruby DRb創建最簡單的聊天系統

端子1:

require 'drb' 
class A 
    def A.my_add(line, from) 
     puts from + ': ' + line 
    end 
end 

DRb.start_service('druby://127.0.0.1:61676', A) 
B = DRbObject.new_with_uri('druby://127.0.0.1:61677') 

while (line=gets).chomp != 'bye' 
    A.my_add line, "Terminal 1" 
    B.my_add line, "Terminal 1" 
end 

2號航站樓:

require 'drb' 

class B 
    def B.my_add(line, from) 
     puts from + ': ' + line 
    end 
end 
DRb.start_service('druby://127.0.0.1:61677', B) 
A = DRbObject.new_with_uri('druby://127.0.0.1:61676') 


while (line=gets).chomp != 'bye' 
    A.my_add line, "Terminal 2" 
    B.my_add line, "Terminal 2" 
end 

我知道這是很簡單的,只需2個端子,每一個消息都與'所有終端顯示從'前綴。但一個醜陋的事情是,我複製了同一個班級,併爲每個終端打開不同的線程,這是因爲我不知道如何將字符串打印到其他機器的控制檯。因此,如果代碼可以這樣寫:

class A 
    def A.my_add(line, from) 
     for <DRb Server and all clients> do 
     puts<to that terminal> from + ': ' + line 
     end 
    end 
end 

然後我們可以維護類A並使用一個線程。對於每條消息,只需調用A.my_add,然後將其打印到所有終端。我感謝您的幫助。謝謝!

回答

0

這是我怎麼會去這樣做:

正確的做法是這樣的:每個系統都會有一個唯一的IP,所有的通信使用相同的端口。因此,每個終端都必須這樣做: 1.找到本地系統的ip並自動將其放入start_service例程中。 2.定義一個發送端口和一個接收端口。 3.運行DRB服務器。

要與指定的終端1通信至終端2: 使用終端1中的發送端口將消息發送至終端2的接收端口。

對於多個終端通信: 您有終端列表,它將名稱映射到IP地址。 您可以遍歷終端列表以發送消息到接收端口。