Посоветуйте мобильную игру p2p через сеть 3G?

Я делаю мобильную игру, похожую на Street Fighter, где два игрока играют друг с другом через Интернет.

Игра отправляет небольшой пакет (статус контроллера) другой стороне каждые 30 мс (идет много пакетов).

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

Однако при переходе к новому дизайну у меня возникают вопросы:

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

Или, может быть, игра, которая рассылает такие пакеты, вообще-то не является хорошей идеей для сети 3G?


person Joe Huang    schedule 14.01.2015    source источник


Ответы (2)


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

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

Взгляните на обсуждение этого действительно полезного вопроса и ответа для получения некоторой информации о UDP и TCP, а также о том, почему это не такой простой вопрос:

Говоря о скоростях передачи данных, о которых вы говорите, также стоит отметить, что вы находитесь в сфере решений типа VoIP, поэтому стоит взглянуть на некоторые обсуждения VoIP, в частности, сосредоточив внимание на RTP, который является медиапотоком - т.е. фактические голосовые пакеты, в отличие от сообщений управления SIP (например), которые устанавливают и управляют вызовом, а также то, как его можно маршрутизировать напрямую или через сервер. В этой ссылке есть отличное обсуждение этого в сфере VoIP / SIP:

С вашей точки зрения стоит помнить, что наличие потока трафика через ваш сервер дает вам возможность анализировать или изменять его, что может открыть возможность появления новых функций сейчас или в будущем.

Я бы также сказал, что если все, что вы делаете, это пересылаете пакеты на этом этапе, вы, вероятно, сможете найти архитектуру, которая даст вам намного больше, чем 30 одновременных «вызовов» на довольно среднем сервере - опять же, глядя на архитектуры из домена VoIP. здесь могут быть полезны (те, которые проксируют или перенаправляют трафик RTP, а не управляющие серверы, которые обрабатывают сигнализацию - например, сообщения SIP).

Работа с VoIP также имеет ту же проблему UDP «дырокола», и по этому тоже довольно много документации, если вы будете искать протоколы STUN и TURN, вы получите хороший обзор. Ссылки на Википедию для обоих ниже:

Если вы разрешили это для своего приложения, было бы интересно увидеть здесь результаты - может быть, вы также можете поделиться ими в качестве ответа на вопрос?

person Mick    schedule 20.01.2015
comment
Спасибо за Вашу информацию. Я понимаю большую часть этого, но мой вопрос больше о сети 3G, потому что я видел, как некоторые люди (некоторые ответы в stackoverflow) говорили, что пробивка отверстий UDP невозможна в большинстве сетей 3G, потому что провайдеры 3G намерены блокировать такое использование UDP, но я Я не уверен на 100%, поэтому надеюсь, что кто-то, кто действительно знает об этом, может дать некоторые конкретные ответы. Кроме того, некоторые люди говорят, что 3G не может обрабатывать пакеты UDP с такой скоростью, просто забудьте об этом. Опять же, я надеюсь получить больше доказательств, прежде чем откажусь от идеи игры. - person Joe Huang; 22.01.2015
comment
Кстати, вопрос не такой уж и старый :) Я все еще надеюсь получить больше ответов или информации. - person Joe Huang; 22.01.2015

Проблема в том, что в сети 3G, подобной общедоступным сетям Wi-Fi или другим более дешевым интернет-провайдерам, вы получаете сопоставленный IP-адрес за брандмауэром. Например, прямо сейчас на моем устройстве мой IP-адрес телефона - 100.116.200.55. Но это нельзя пинговать. К сожалению, у меня нет второго телефона того же провайдера, чтобы проверить, могут ли хотя бы два телефона пинговать друг друга в одной сети. Но как только вы окажетесь в другой камере, подальше она, скорее всего, больше не будет работать, точно так же, как я не могу пинговать свой телефон со своего компьютера.

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

person Gunther    schedule 08.07.2015