Работа в сети с удаленной Java-программой

Я ищу сеть серверов bukkit, которые все работают под единым игровым модом, обеспечивающим межсерверную связь. Обычный способ сделать это - использовать базу данных MySQL и периодически (5 секунд или около того) извлекать все серверы из базы данных, чтобы поддерживать все серверы в актуальном состоянии. Мне интересно, есть ли лучший способ сделать это.

У меня есть идея, но я недостаточно разбираюсь в сетях, чтобы понять, осуществима ли она. Я рассматриваю возможность запуска игрового мода под собственным Java-сервером (далее именуемым сервером модов и не связанным с bukkit). Сервер модов будет иметь все данные, связанные с модом, и он будет отвечать за выполнение всех вычислений, связанных с модом (обработка денежных транзакций, добавление и удаление заявленных земель, а также работа с налоговым циклом). Все bukkit-серверы взаимодействуют с мод-сервером всякий раз, когда ему нужно определить, например, может ли игрок сломать блок или причинить вред другому игроку. Все изменения данных мода производятся на сервере мода. Серверы bukkit — это, по сути, просто порталы для взаимодействия с сервером модов. Пока мод-сервер является однопоточным, не должно быть проблем с параллелизмом, условий гонки или конфликтов.

Я читал вызов удаленного метода и подумал, что, возможно, это был способ добиться этого. Сервер модов будет считаться сервером RMI, а клиенты будут серверами Bukkit. Я прочитал документацию по сокетам Java, но не уверен что это то, что я ищу. Мне трудно гуглить, потому что это всего лишь концепция, для которой я не знаю всех технических терминов. Любые идеи или предложения? Спасибо.


person Kammeot    schedule 30.07.2014    source источник
comment
Как мод-сервер может быть однопоточным? В любом случае RMI не является однопоточным, если только вы не объявите все удаленные методы synchronized или не используете synchronized блоки самостоятельно.   -  person user207421    schedule 31.07.2014


Ответы (2)


Каждый bukkit-сервер должен отвечать за управление игроками на нем и только на нем. Таким образом, вам не нужен этот мод-сервер для обработки SQL, когда вы можете просто загружать данные игрока, когда игрок присоединяется к этому конкретному серверу. Любые обновления для игрока могут быть сделаны на локальных данных, а затем зафиксированы в базе данных, когда игрок уходит или когда это происходит. Например, или сервер использует zPermissions для межсерверных разрешений. Он обновляется при изменении, и игроки, которые переходят на другой сервер, получают все свои разрешения от оригинала. Единственная проблема здесь заключается в том, что изменяются групповые разрешения, для обновления которых просто требуется перезагрузка разрешений, но они не будут часто меняться после того, как ваш сервер будет организован.

person CrypticStorm    schedule 30.07.2014
comment
Это правда, но мой мод должен позволять игрокам совершать покупки на разных серверах. Поэтому ему потребуется актуальная версия данных о рынке. - person Kammeot; 31.07.2014
comment
На серверах как? Пример был бы полезен. - person CrypticStorm; 31.07.2014

Вы используете BungeeCord? Если да, то вы можете создать свой собственный канал плагинов.
Вы можете отправлять и получать данные с каждого субсервера (сервер bukkit) на главный сервер (прокси-сервер bungeecord) через свой собственный канал. Вот объяснение:
http://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/#the-bungeecord-plugin-channel

person Rene8888    schedule 02.08.2014