Как использовать соединения Http, такие как TCP-сокет в Java - PullRequest
1 голос
/ 10 марта 2010

Я, может быть, здесь немного спрашиваю, но я верю в сообщество, поэтому стоит попробовать. Я создаю игру и пытаюсь выбрать тип соединения, который будет использоваться для связи между мобильным клиентом Java и серверным сервером Java.

Программирование в Java на сокете - это просто - есть прекрасное учебное пособие на эту тему, и двустороннее общение тривиально.

Проблема в том, что на мобильном клиенте (Android) не гарантируется, что сотовая сеть позволит вам устанавливать TCP-соединения. Это заставляет меня думать, что использование HTTP-соединения - это путь.

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

Опять же, я мог бы спросить много, но это кажется довольно распространенной проблемой, есть ли библиотека или инфраструктура, которую я могу импортировать / использовать, чтобы обернуть соединение Http и обеспечить двустороннее долгосрочное соединение (которое переподключается автоматически и т.д.) Я немного читал о cometD, но, похоже, у него нет библиотеки Java, которую я могу просто взять.

Коммуникация, которая мне нужна, не тяжелая, не постоянная двусторонняя передача данных, просто случайные обновления в любом случае, чтобы игра продолжалась.

Заранее благодарен за то, что просеял мое невежество,

Gavin

Ответы [ 3 ]

1 голос
/ 10 марта 2010

Выполнение длинного опроса на устройстве имеет некоторые недостатки на мобильном устройстве.

  • Если трубка движется, она будет постоянно терять соединение, и вам придется это распознать и восстановить. Большую часть времени это сделает вашу игру непригодной для использования, если игрок сидит в поезде или автомобиле.
  • В результате подключения трубка будет постоянно отправлять и получать данные и, следовательно, использовать более высокий уровень антенны. Это может разрядить всю батарею за один час игры, даже если вам не нужно много энергии для обработки, графики и подсветки экрана.

Если вы хотите попробовать игру, которая показывает эти проблемы, попробуйте Parallel Kingdom Age of Emergence.

Я бы посмотрел на XMMP, предложенный alex. Если вы не можете найти библиотеку XMMP на Android, используйте Smack . Или взгляните на этот вопрос .

0 голосов
/ 10 марта 2010

Модель Comet пытается решить эту проблему при использовании HTTP. Здесь есть несколько примеров Java .

Вы найдете примеры / статьи, в которых в основном говорится о ajax / XMLHttpRequest на стороне клиента, но все, что вам действительно нужно сделать, это убедиться, что вы используете клиентскую библиотеку, использующую http / 1.1 и http keepalive, и "опросить" URL в цикле.

Идея состоит в том, что сервер-сервер блокирует и не отправляет вам ответ, пока на самом деле что-то стоит отметить, в то время как http keepalive поддерживает соединение с сервером между запросами, поэтому вы не платите за установку новое TCP-соединение для каждого запроса - я предполагаю, что в Android уже есть стандартная библиотека http, которая должна обрабатывать все это для вас, включая повторное подключение.

На стороне сервера Tomcat поддерживает обработку Comet, как упомянуто в статье developerWorks выше - если только вы не хотите делать это «вручную» в сервлете, который также довольно прост, пока вам не потребуется масштабировать число клиентов. s, и есть такие фреймворки, как gwt-comet

0 голосов
/ 10 марта 2010

Как упоминает Джим Льюис, TCP вполне возможен. Какой бы транспорт вы ни использовали, вам всегда придется работать с мобильными устройствами & mdash; то есть потеря обслуживания, переподключение и т. д.

Проверьте этот предыдущий вопрос в том же ключе:
Лучший подход для отправки данных с сервера на устройство Android

Кроме того, вы можете попробовать взглянуть на библиотеку push-уведомлений Android от Эрикссон, которая может включать в себя некоторые элементы переподключения, которые вы хотите (не я проверял): https://labs.ericsson.com/apis/mobile-java-push/blog/first-version-push-android-available

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