В качестве примера возьмем шутер от первого лица, сервер должен будет отслеживать позицию игроков, действия, здоровье и т. Д. Как клиент отправляет серверу эту информацию? И как сервер может различать, посылает ли клиент им позиции игроков или новое здоровье игроков?Как правильно взаимодействуют серверы и клиенты?
ответ
В настоящее время я работаю над своей собственной игрой, своей многопользовательской фермерской игрой, но концептуально сервер будет обрабатывать ее аналогичным образом.
Первый вопрос касается реализации. Например, я использую Socket Channels для различения различных игроков. Например, когда игрок перемещается, у меня будет передача пакета от клиента на сервер, указывающая на движение (в данном случае новые координаты). Эта информация отправляется по каналу для этого игрока и обновляет информацию о игроках.
Для обработки множества типов данных вам потребуется какой-то идентификатор для разделения различных типов информации ... например, операторов switch/if. Это не очень полезно, но ниже приведен пример кода sudo.
if (packetCode == "Players-Health-Change") {
player.setHealth(newHealth);
} else if (packetCode == "Players-Location-Change") {
player.setLocation(newLocation);
}
Это очень конкретный, однако, то, что вы хотите запустить систему, и архитектуру. Я бы рекомендовал взять книгу/учебник по этому вопросу.
Полезные ссылки: http://docs.oracle.com/javase/tutorial/networking/sockets/
Задача a) сравнение строк с '==' вместо 'equals' b) Очень маловероятно, что FPS (или любая другая игра, которая должна передавать много данных) использует строки для представления типа данных; Для данных, которые могут быть представлены более компактно (с использованием целочисленного типа данных для представления данных), и времени процессора (выбор правильного случая на основе строки менее эффективен, чем выбор правильного случая) , если данные представлены как число). Но, конечно, общая идея правильная (т. Е. Отправка данных, которые идентифицируют тип информации вместе с данными). – fabian
- 1. Как клиенты Wayland взаимодействуют с сервером?
- 2. Многие клиенты и многие серверы в RabbitMQ
- 3. клиенты Do WCF/серверы проверки
- 4. Java TCP-клиенты/серверы и проблемы с циклом
- 5. SOAP-серверы и клиенты с картой Zend (Получение ошибок)
- 6. JSW-серверы (laravel) и/или клиенты (угловой 2)?
- 7. Как серверы и клиенты Shoutcast имеют дело с заголовками фреймов и зависимостями фреймов?
- 8. SSL - разрешать только определенные клиенты или серверы (доверенное хранилище Java)
- 9. Как взаимодействуют модели и модули?
- 10. Как взаимодействуют DeleteFile и FindFirstFile?
- 11. Do MooseX :: AttributeHelpers и MooseX :: FollowPBP взаимодействуют правильно?
- 12. Прогрессивные рендеринг и прокси-серверы
- 13. Как взаимодействуют операции Meteor.subscribe и MyCollection.find *?
- 14. OpenCV и Numpy взаимодействуют плохо
- 15. Лучший Mac OSX и Windows Git Клиенты, серверы и инструменты для сравнения?
- 16. Серверы и брандмауэр WebSocket
- 17. Как объекты взаимодействуют в ООП?
- 18. Серверы Unix TCP и UDP-серверы
- 19. Android APP и mysql взаимодействуют
- 20. Qt: Как взаимодействуют QGuiApplication и QQmlApplicationEngine?
- 21. В CockroachDB, как взаимодействуют партии и транзакции?
- 22. Как взаимодействуют функции окна и групповое предложение?
- 23. Как Java и NodeJS взаимодействуют в бэкэнд?
- 24. Как взаимодействуют пакеты подпроцесса и многопроцессорности Python?
- 25. NSRunLoop и NSAutoreleasePool, как они взаимодействуют?
- 26. Как Vulkan Driver и Vulkan SDK взаимодействуют?
- 27. teamplayer и pyhook взаимодействуют странно
- 28. RequestFactory и автономные клиенты
- 29. OAuth2 Клиенты и гранты
- 30. MMORPG и игровые клиенты
Короче говоря, магии. В итоге у него много данных. [Вот протокол протокола minecraft, как пример] (http://wiki.vg/Protocol). – Pokechu22