私は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つの端末であり、すべてのメッセージが「from」プレフィックスですべての端末に表示されることを知っています。しかし、醜いのは、同じクラスをコピーして、端末ごとに異なるスレッドを開くことです。これは、他のマシンのコンソールに文字列を出力する方法がわからないためです。したがって、コードを次のように記述できる場合:
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を維持し、1つのスレッドを使用できます。すべてのメッセージについて、A.my_addを呼び出すだけで、すべての端末に出力されます。私はあなたの助けに感謝します。ありがとう!