RMI - это не сложная вещь, а наоборот.
Это позволяет вам разрабатывать свой игровой протокол, не заботясь о том, чтобы Message
объекты проходили между сервером и клиентами с длинными цепями if, чтобы проверить, какой это тип сообщения, и выполнить все, что требуется.
Что вы действительно можете сделать с RMI - это иметь централизованный объект (на сервере), для которого вы напрямую вызываете методы от клиентов, таких как iWantToMoveThere(position)
или iWantToBuyLand(where)
и так далее. Это упрощает протокол и накладывает некоторые накладные расходы, которые у вас будут в любом случае, так как я отговариваю вас от реализации бинарного прокотола. XML или сериализованный Java был бы хорошим компромиссом, так как вам не нужно в реальном времени для такой игры, как эта.
Еще одним преимуществом RMI является то, что вы легко сможете управлять главным сервером, к которому могут подключаться многие игровые серверы, чтобы дать игрокам возможность играть в них, а также многими другими мелочами, такими как управление отдельным лобби и т. Д.
Так же, как прямой опыт: я использовал RMI для управления сервером, который позволял разработчикам публиковать свои собственные игровые плагины, позволяющие игрокам автоматически подключаться к серверу и загружать контент, чтобы иметь возможность играть. Все было обработано RMI, за исключением того факта, что мне нужно было обратное TCP-соединение, чтобы иметь возможность обрабатывать асинхронные события всякий раз, когда мне было нужно. Весь исходный код был всего ~ 1 тыс. Строк в группе из 7-8 классов