Как быстро устройство Android может вызывать веб-сервис REST? - PullRequest
0 голосов
/ 07 марта 2012

Я пытаюсь создать многопользовательскую игру для Android с постоянным виртуальным миром. У меня есть сервер с базой данных, которая представляет текущее состояние мира, а также некоторые открытые веб-сервисы. У меня есть приложение для Android, которое рисует взгляд конкретного игрока на мир, а также делает http-вызов на сервер, чтобы узнать текущее состояние игрока (и соответственно обновить вид андроида).

Пока мой план состоит в том, чтобы приложение постоянно опрашивало сервер, пока приложение активно (нет необходимости опрашивать, когда пользователь не играет). Мне интересно, как быстро я смогу опросить свой веб-сервис и обновить телефон. Я хотел бы, чтобы игра была отзывчивой и несколько синхронизированной с другими игроками в виртуальном мире. Кроме того, есть какие-либо мысли о нагрузке, с которой сервер должен справиться? это будет узким местом?

Спасибо за любую помощь! Дайте мне знать, если я смогу что-то уточнить.

1 Ответ

3 голосов
/ 07 марта 2012

Существует много факторов, влияющих на скорость, таких как скорость соединения (Wi-Fi / 3g / 4g / hsdpa) или время отклика сервера. или если пользователь параноик и построил клетку Фарадея. Это всего лишь несколько возможностей. Вам просто нужно сделать все возможное, с помощью повышения производительности и обработки ошибок (однако я бы хотел что-то сделать, чтобы избежать ранних проблем с оптимизацией).

Вы можете посмотреть на простые вещи, такие как использование JSON поверх XML, поскольку он имеет меньший размер, или даже использовать сжатие.

Я бы сказал, что хотя я никогда этого не делал, вы могли бы использовать UDP, но это зависит от того, нужны ли вам 100% ваши пакеты данных для получения. Насколько я понимаю, TCP пытался обеспечить доставку пакетов, однако из-за этого он медленнее. Например, если это какой-то FPS, я бы использовал UDP, однако, если он основан на поворотах, то с TCP все будет в порядке.

Пример учебника по UDP можно найти здесь: http://www.helloandroid.com/tutorials/simple-udp-communication-example

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

В помощь здесь приведены ссылки на некоторые учебные пособия по Alarm и AsyncTask:

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