Возможно, я немного задаюсь здесь, но я верю в сообщество, поэтому стоит попробовать. Я делаю игру, и я пытаюсь выбрать тип соединения для связи между мобильным клиентом Java и сервером сервера Java.
Программирование сокетов на Java очень просто - там прекрасный учебник по этому вопросу, а двухсторонняя связь тривиальна.
Проблема заключается в том, что на мобильном клиенте (Android) не гарантируется, что сотовая сеть позволит вам устанавливать TCP-соединения. Это заставляет меня думать, что использование HTTP-соединения - путь.
HTTP-соединения основаны на запросах, но мне нужен способ push-уведомления от сервера к клиенту. Кажется, решение этой проблемы заключается в использовании "длинного опроса", который я немного прочитал об этом, но пока не вижу простого примера того, чего я пытаюсь достичь.
Снова я могу задавать много вопросов, но это похоже на довольно распространенную проблему: есть ли библиотека или инфраструктура, которую я могу импортировать/использовать, чтобы обернуть соединение Http и обеспечить двухстороннее постоянное соединение (которое автоматически соединяется и т.д.). Я немного прочитал о cometD, но у него, похоже, нет библиотеки Java, которую я могу просто подобрать.
Мне нужна связь, это не тяжелый, а не постоянный двухсторонний поток данных, просто случайные обновления, чтобы поддерживать игру.
Заранее спасибо за просеивание моего невежества,
Гэвин
Выполнение длинных опросов на устройстве имеет некоторые недостатки на мобильном устройстве.
Если вы хотите попробовать игру, которая показывает эти проблемы, попробуйте Parallel Kingdom Age of Emergence.
Я бы посмотрел на XMMP, как было предложено alex. Если вы не можете найти библиотеку XMMP на Android, используйте Smack. Или посмотрите на question.
Модель Comet пытается решить эту проблему при использовании HTTP. Вот несколько примеров Java здесь.
Вы найдете примеры/статьи, в основном говорящие о ajax/XMLHttpRequest на стороне клиента, но все, что вам действительно нужно сделать, это убедиться, что вы используете клиентскую библиотеку, использующую http/1.1 и http keepalive, и "опрос" URL в цикле.
Идея - это серверные серверные блоки и не отправляет вам ответ до тех пор, пока на самом деле ничего не стоит отметить, а http keepalive поддерживает соединение с сервером между запросами, поэтому вы не платите цену за установку новое TCP-соединение для каждого запроса. Я предполагаю, что у android уже есть стандартная HTTP-библиотека, которая должна обрабатывать все это для вас, включая повторные подключения.
На стороне сервера Tomcat поддерживает обработку Comet, как указано в статье developerworks выше, если вы не хотите делать это "вручную" в сервлете, который также довольно забавный, пока вам не нужно действительно масштабировать клиента. s, и существуют такие рамки, как gwt-comet
Как упоминает Джим Льюис, TCP вполне возможен. Независимо от того, какой транспорт вы используете, вы всегда будете иметь дело с работой над мобильным телефоном; то есть потеря обслуживания, повторное подключение и т.д.
Посмотрите этот предыдущий вопрос в той же строке:
Лучший способ отправить данные с сервера на устройство Android
Кроме того, вы можете попытаться взглянуть на библиотеку Android Android push, которая может инкапсулировать некоторые из компонентов повторного соединения, которые вы хотите (не то, что я проверил):
https://labs.ericsson.com/apis/mobile-java-push/blog/first-version-push-android-available