Когда я писал простой сервер для простой многопользовательской игры на клиентском сервере, я думал о следующем текстовом протоколе с использованием библиотеки перевода. По сути, каждая команда имела определенное значение, например:
1 = character starts turning right
2 = character starts turning left
3 = character stops turning
4 = character starts moving forward
5 = character stops moving
6 = character teleports to x, y
Таким образом, клиент просто передает следующее, чтобы сообщить, что игрок сейчас движется вперед и поворачивает направо:
4
1
Или, чтобы телепортироваться на 100x200:
6#100#200
Где # - разделитель параметров.
Соединение сокета будет связано с идентификатором игрока, так что не нужно передавать идентификатор с протоколом, чтобы знать, какому игроку принадлежит сообщение.
Конечно, все данные будут проверяться на стороне сервера, но это другая тема.
Теперь, мне кажется, это достаточно эффективно, всего 2 байта, чтобы сообщить серверу, что я двигаюсь вперед и поворачиваю направо.
Однако большинство "профессиональных" фрагментов кода, которые я видел, казалось, отправляли объекты или команды xml. Мне кажется, это требует гораздо больше ресурсов сервера, не так ли?
Является ли моя неопытная логика того, почему мой текстовый протокол будет эффективен? Или какой протокол рекомендуется использовать для многопользовательских игр в реальном времени?
Я хочу установить максимально эффективный протокол, потому что я не хочу использовать несколько кластеров / серверов для покрытия чрезмерной пропускной способности моей многопользовательской двухмерной игры, а также для решения проблем и проблем с синхронизацией.