Как вызвать метод на клиенте с сервера? - PullRequest
3 голосов
/ 31 декабря 2011

Я разрабатываю игру как с сокетами, так и с RMI. Часть сокетов сделана, теперь я начинаю часть RMI. Я хочу иметь возможность пригласить кого-нибудь сыграть (A-> B) и получить ответ (B-> A).

Вы можете мне помочь?

Спасибо заранее. Приветствия

РЕДАКТИРОВАТЬ: Я исследовал и в настоящее время я также реализую клиент как удаленный объект (определение интерфейса и его реализации). Я думаю, что это называется обратным вызовом. Я на правильном пути?

Я думаю, что А вызывает метод на удаленном объекте на компьютере Б. Сервер на B спрашивает клиента (который также является сервером того же компьютера), хочет ли он играть с A, получает ответ и возвращает его A. Как я уже сказал, я только что закончил реализацию этой игры с сокетами tcp и udp и теперь я должен сделать то же самое с RMI. У двух клиентов нет возможности общаться напрямую, как они делают это по TCP-соединению, используя RMI, не так ли?

1 Ответ

4 голосов
/ 01 января 2012

Я исследовал и сейчас внедряю клиента как удаленный объект (определяя интерфейс и реализуя его).Я думаю, что это называется обратным вызовом.Я на правильном пути?

RMI обычно реализуется как клиент и сервер.Клиент делает вызовы на сервере, который возвращает объект, который может быть использован на клиенте.Прочитав комментарии, они верны, что, учитывая то, как вы описали проблему, вам нужно будет сделать клиент также сервером RMI.Однако я не уверен, что это необходимо.

Например, предположим, у вас есть 2 клиента, которые оба пытаются сыграть в игру.Протокол может выглядеть примерно так:

  1. A связывается с сервером S. Сервер сохраняет адрес A, а затем возвращает сообщение типа «ожидающий другого игрока» на A.
  2. A затем связывается с S каждые пару секунд, чтобы узнать, появился ли другой игрок.
  3. B, затем связывается с S, и начинается игра между A и B. S возвращает сообщение о начале игры в магазины B. Sнекоторый объект Game в его памяти (и / или на диске), который отслеживает ход игры.
  4. В следующий раз, когда A обращается к серверу, он также получает сообщение о запуске игры.

Таким образом, вместо того, чтобы серверу нужно было связываться с A или B, они время от времени опрашивают, чтобы получать обновления игры и тому подобное.

Вызовы метода для S также могут ждать другого игрока и не возвращатьсяпока есть один.Однако я думаю, что вариант опроса лучше, потому что тогда S знает, перестает ли A звонить, и A не нужно беспокоиться о сбое и зависании S.

Надеюсь, это поможет.

...