Создать простейшую систему чата только с ruby ​​DRb

Я только что выучил 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, и оно будет распечатано на всех терминалах. Я ценю вашу помощь. Спасибо!

1 ответ

Вот как я мог бы сделать это:

Правильный подход таков: каждая система будет иметь уникальный IP-адрес, и все коммуникации будут использовать один и тот же порт. Таким образом, каждый терминал должен будет сделать следующее: 1. Найдите IP-адрес локальной системы и автоматически вставьте его в свою подпрограмму start_service. 2. Определите один порт для отправки и один порт для приема. 3. Запустите сервер DRB.

Чтобы установить связь с указанным терминалом 1 до терминала 2: Используйте порт отправки в терминале 1, чтобы отправить сообщение на порт приема в терминале 2.

Для связи между несколькими терминалами: у вас есть список терминалов, который сопоставляет имена с IP-адресами. Вы можете просмотреть список терминалов, чтобы отправить сообщение на порт получателя.

Другие вопросы по тегам