TCP клиент / сервер против многоадресной рассылки

Я разрабатываю приложение, не предназначенное для рынка, которое работает на 20-30 устройствах Android (предназначено специально для планшетов с ОС Android / Honeycomb / ICS), поддерживающее соединение по локальной сети WIFI в течение 1-2 часов, и необходимо обмениваться данными (простые объекты, представляющие команды) между ними.

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

в качестве решения этой потребности связи - я использую некоторое время с открытым исходным кодом
Библиотека, которая инкапсулирует TCP клиент-серверный протокол, называется - Kryonet. Я обнаружил, что им очень легко пользоваться, и в основном он выполняет свою работу, хотя иногда он "нестабилен" - нарастает множество отключений. Я не могу позволить себе это отключение, оно наносит ущерб всему потоку и сценарию использования, в результате чего клиент теряет команды.

Я делаю некоторую логику восстановления, которая повторно соединяет клиентов и отправляет им то, что они пропустили, но этого недостаточно для варианта использования.

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

  • Какой наилучший подход я должен использовать для реализации описанного мной поведения? (не обязательно один из двух, которые я предложил)

ТИА

1 ответ

Решение

Хотя JGroups обещает лучшее решение для вашей ситуации, вы можете поэкспериментировать немного больше, чтобы выяснить, почему происходят отключения. Так как ваши клиенты и сервер являются планшетами, есть несколько других причин, которые не связаны:

1) Если соединения не поддерживаются в Service тогда они будут крайне ненадежными по умолчанию. (Смотрите этот вопрос об уничтожении синглетонов в Android)

2) Если для сокетов не было установлено "keepalive", то они истекают через произвольное количество секунд.

3) Используемые вами устройства могут отключить некоторые постоянные соединения, когда они переходят в спящий режим.

4) Планшеты могут выходить из зоны действия WiFi и переключаться на мобильную сеть.

Попробуйте сетевую часть вашего кода на нескольких настольных компьютерах, чтобы определить, связана ли проблема с Kryonet или вашим кодом, или проблема заключается в запуске его на Android.

Другие вопросы по тегам