Minecraft по взрослому, ч. 2
Это мой цикл постов разработки Minecraft по взрослому. Прочитать все посты из этого цикла можно в моем профиле.
Общение между сервером и клиентом происходит с использованием Netty - это сетевой Java-фреймворк для высокопроизводительных приложений. При активной игре, между клиентом и сервером идет почти безостановочный обмен пакетами. Например при перемещении игрока, клиент отправляет 20 пакетов в секунду и получает столько же пакетов с информацией об окружающих сущностях.
Netty устанавливает прямое соединение между клиентом и сервером, при этом клиент, очевидно, поддерживает только одно соединение, а значит одновременно подключается только к одному серверу. Но если мы хотим создать большую и высоконагруженную систему, то одним сервером не обойтись.
Одно из самых популярных серверных ядер Paper, в среднем может выдержать до 500 игроков. При использовании специальных ядер с оптимизацией, количество игроков можно уведичить до 1-2к. Но если мы хотим десятки тысяч игроков? Тогда в дело вступает прокси и мульти-серверность.
Клиент подключается к прокси, который наследует лишь некоторую часть протокола Minecraft. Основной трафик от клиента перенаправляется на сервера и так мы получаем распределенную систему. В целом для тех, кто знает что такое прокси - все очевидно.
Таким образом популярные прокси (BungeeCord, Velocity) позволяют объединить несколько независимых серверов Minecraft в единую сеть. И это дает нам возможность масштабирования.