Изучая технологии Java-сервера, пытаясь прояснить некоторые вещи. Существует несколько технологий, позволяющих приложениям Java взаимодействовать друг с другом.Как сервер может передавать данные клиенту?
1) Веб-сервисы (REST/SOAP) через HTTP
2) Простой POST/GET с использованием URLConnection через HTTP.
3) Розетки
4) RMI = Sockets + сериализации объектов + Некоторые утилиты
5) Различные медиа-сервера, как red5 = RTMP или RTMPT
Всех этих технологий предполагает, что есть сервер приложения и клиентского приложения. Клиентское приложение знает адрес сервера и должно быть инициатором вызова. И насколько я понимаю, в настоящее время сервер для передачи данных клиенту, он может отправлять данные только как ответ клиенту. И возможно, если только они меняют свои роли, в этом случае сервер должен знать IP-адрес клиента.
Так что мне интересно, как работают сетевые игры? Возможно ли открывать соединение и обмениваться данными между сервером и клиентом на все время, не вытягивая запрос от клиента каждые 1-2 секунды, а сервер не будет знать IP-адрес клиента. Я не говорю о кометах и других хаках.
Спасибо
Также сетевые игры в реальном времени часто на самом деле «обманывают». Каждый клиент обновляет мир локально в реальном времени и выполняет некоторые трюки для повторной синхронизации общей имитации, когда приходит новое обновление с сервера. Когда вы стреляете в своего врага, возможно, он уклонится от вашего выстрела, получая только небольшой урон, а может и нет. Разумеется, именно сервер будет решать в зависимости от того, будет ли команда dodge от этого клиента прибыть до или после выстрела ... но атакующий игрок, вероятно, не заметит возможного несоответствия между показанной 3D-анимацией и количеством энергии бары вычитаются. – 6502