Skip to content
This repository has been archived by the owner on Oct 3, 2024. It is now read-only.

Networking #13

Open
loredan opened this issue Feb 17, 2014 · 4 comments
Open

Networking #13

loredan opened this issue Feb 17, 2014 · 4 comments

Comments

@loredan
Copy link
Member

loredan commented Feb 17, 2014

Эту проблему мы на какое-то время отложили, но пора бы вернуться к ней. Я пока что не совсем понимаю как это вообще может быть сделано.

  • Вариант с Bluetooth, думаю, можно отбросить сразу, у него слишком маленький радиус действия и мы с ним так и не справились на ЛШ.
  • Вариант с WiFi Direct получше, но он только для устройств с Android 4.0 и выше.
  • Можно использовать NSD (http://developer.android.com/training/connect-devices-wirelessly/nsd.html), как я понял это обнаружение сервисов в локальной сети, однако это работает только начиная с 4.1, что еще хуже.
  • Наиболее реальным мне представляется использование чего-то вроде VPN, однако класс VpnService есть в API опять же только с четвертой версии андроида. Кроме того, возникнет проблема непосредственно с подключением к VPN, нам нужен будет сервер с каким-нибудь статичным адресом. Зато в данном решении снимаются ограничения по расстоянию между игроками.
  • Либо можно сделать как и в прошлом году, только на этот раз чуть умнее. Однако этот вариант становится проблемой на этапе распространения конечного продукта (мы же к этому стремимся, да?), потому что данные каждой текущей игры хранятся на сервере и пока играем только мы - все в порядке, а если таких игр будет хотя бы сотня? Учитывая частоту запросов которая у нас была тогда, это будет натуральная DDoS-атака
@alex-ac
Copy link

alex-ac commented Feb 17, 2014

Опиши, пожалуйста, подробнее решение, которое использовали летом.

У блютуза дальность до сотни метров и поддержка ad-hoc, кажется, что этого достаточно.

В общем случае, наверное, стоит использовать wifi direct, если он поддерживается, в качестве фоллбэка сваливаться на блютуз, а если у них вдруг не хватает дальности — сваливаться на централизованное решение с сервером. То есть решение о используемом соединении должно приниматься в рантайме.

@loredan
Copy link
Member Author

loredan commented Feb 17, 2014

Летом было написано что-то вроде сервера, обмен данными производился при помощи GET-запросов: телефон отсылает свои данные, в ответ получает данные всех остальных игроков.

Дальность блютуза до сотни метров мне кажется серьезно завышенной. В идеальных условиях - может быть

@Mrkol
Copy link
Contributor

Mrkol commented Feb 17, 2014

Подробнее на счёт прежнего решения: на сервере накапливался стак эвентов для каждого игрока, и при каждом подключении игрок отсылал 1 эвент, который кидался в стаки остальных игроков, и получал обратно опустошённый стак для себя. Это позволило бы пожертвовав немного отставания, получить более плавные последовательности событий у всех клиентов, восстанавливая их по таймстампу на эвентах.

@alex-ac
Copy link

alex-ac commented Feb 17, 2014

Для начала сойдет, но вообще, можно сделать оптимальнее.

@loredan loredan self-assigned this Mar 30, 2014
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants