Android вещает более 3 г - PullRequest
       14

Android вещает более 3 г

1 голос
/ 16 декабря 2011

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

Моей первой мыслью было использование UDP-трансляции, однако согласно обоим http://code.google.com/p/boxeeremote/wiki/AndroidUDPи Android 3G UDP Broadcast он не сможет протолкнуть NAT через мобильную сеть (что важно для моего приложения).

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

Последняя альтернатива, о которой я могу подумать, - это иметь несколько соединений tcp / ip, проходить через все подключенные клиенты и отправлять широковещательную рассылку.Но так как я рассчитываю на то, что у меня будет не менее 30 слушателей, я считаю, что это будет дорого.

У меня еще нет кода, связанного с трансляцией, поэтому я не разместил ни одного;)

Есть ли способ пробиться через NAT?Сможет ли телефон обрабатывать 30 одновременных TCP / IP-соединений?Или мне стоит заняться каким-нибудь другим методом вещания?

Любая подсказка будет принята с благодарностью!

С уважением, Йохан Риш

::::::::::::::::::::::::: ADDED :::::::::::::::::::::::::::::::: я будуотправлять строки длиной 10-20 символов каждые 30-360 секунд (будет контролироваться пользователем), содержащие географические точки в строковом формате.Порядок, в котором будут отправляться данные, не важен, поэтому я сначала подумал об udp.

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

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

Это примерно вся необходимая информация, о которой я могу думать, надеюсь, что это прояснит некоторые вещи!::::::::::::::::::::::::: / ADDED :::::::::::::::::::::::::::::::::

1 Ответ

4 голосов
/ 16 декабря 2011

NAT не проходит через UDP, потому что UDP не имеет адреса назначения, поэтому технически UDP должен быть отправлен во все подсети сети.Когда сеть является вашей домашней локальной сетью, это не имеет большого значения, но когда сеть является вашим ISP, университетским магистральным или сотовым провайдером, UDP может быть реплицирован на сотни тысяч подсетей.Это пакетный шторм, который снизит производительность сети для всех, и это является огромным излишним для вашего конкретного приложения, поскольку вы действительно хотите общаться только с небольшим количеством клиентов.

Эта проблема уже была решена много раз.Клиенты обмена мгновенными сообщениями имеют такую ​​же ситуацию, как и вы: вы хотите делать прямые P2P-сообщения, когда это возможно, через брандмауэры.Как они это делают?Первоначальным решением NAT traversal / firewall было настроить сервер ретрансляции сообщений.Все клиенты общаются с сервером, и сервер передает сообщения от одного клиента другим в зависимости от ситуации.Он работает с NAT и межсетевыми экранами, потому что клиент инициирует исходящее соединение с сервером.

Если клиенты могут установить одноранговое соединение, тогда сервер ретрансляции может просто дать клиентам IP-адреса друг друга ипрекратить ретрансляцию сообщений.

UPNP - это протокол, который позволяет клиентам запрашивать межсетевой экран, чтобы открыть порт для входящего трафика.Клиенты BitTorrent используют UPNP, чтобы позволить клиентам подключаться к P2P для обмена файлами.Клиенты находят друг друга через торрент-сервер.Большинство маршрутизаторов брандмауэров домашней локальной сети поддерживают UPNP в настоящее время, но мне кажется сомнительным, что провайдер сотовой сети обеспечит поддержку UPNP для беспроводных соединений.Напомним, что это действительно оптимизировано для «проталкивания» контента, передаваемого с сервера на клиенты, а не из однорангового узла, созданного клиентом.

Лучше всего взглянуть на IM-клиентов с открытым исходным кодом, особенно с Android-реализациями, и посмотреть, как они работают с IM. Джаббер это тот, который приходит на ум, я уверен, что есть и другие.Вы даже можете использовать API обмена сообщениями системы обмена мгновенными сообщениями в качестве своего уровня передачи данных и более или менее оставаться в стороне от подробностей проводного уровня.

...