Как сервер может передать данные клиенту? - PullRequest
6 голосов
/ 02 июля 2010

Изучение технологий Java-сервера, попытка уточнить некоторые вещи. Существует несколько технологий, которые позволяют Java-приложениям взаимодействовать друг с другом.

1) Веб-сервисы (REST / SOAP) через http

2) Простой POST / GET с использованием URLConnection через http.

3) Розетки

4) RMI = Сокеты + Сериализация объектов + Некоторые утилиты

5) Различные медиа-серверы, такие как red5 = rtmp или rtmpt

Все эти технологии предполагают наличие серверного приложения и клиентского приложения. Клиентское приложение знает адрес сервера и должно быть инициатором звонка. И, насколько я понимаю, в настоящее время сервер может передавать данные клиенту, он может отправлять данные только в ответ клиенту. И возможно, если только они меняют свои роли, в этом случае сервер должен знать IP-адрес клиента.

Так мне интересно, как работают сетевые игры? Возможно ли открывать соединение и обмениваться данными между сервером и клиентом за все время без запроса клиента каждые 1-2 секунды, и сервер не будет знать IP-адрес клиента. Я не говорю о комете и других взломах.

Спасибо

1 Ответ

6 голосов
/ 02 июля 2010

Большинство двусторонних постоянных приложений открывают сетевой порт и оставляют его открытым.Сервер прослушивает известный порт, и когда клиент подключается к этому порту, он получает постоянное TCP-соединение с сервером.Такое соединение в основном является двунаправленным «каналом», данные могут передаваться последовательно в обоих направлениях одновременно.Пока этот канал открыт, сервер прослушивает сообщения от клиента, а клиент прослушивает сообщения от сервера.

Общие API ввода / вывода, используемые для каналов TCP, позволяют «разбудить» любой конец соединения: запрос асинхронного ввода / вывода выполняет зарегистрированную функцию обратного вызова из потока, управляемого ОС или I /Библиотека или клиент / сервер связывают свой собственный поток с помощью «блокирующего» вызова, который возвращается, когда данные доступны.Для этой модели не требуется никаких опросов или попыток повторного подключения, клиент и сервер «знают», когда данные доступны, и могут немедленно на них воздействовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...