Я строю мультисистемную систему зеркалирования, которую я хотел бы реализовать, используя гибридный клиент-сервер и метод связи p2p (по крайней мере, это лучший способ описать это).
Моя проблема в том, что в какой-то момент у меня есть центральный сервер (appengine, поэтому есть ограничения на то, что я мог бы сделать из-за временных и сетевых возможностей), который должен был бы доставить сообщение на хост различныхустройства, которые не обязательно работают под одной ОС (Windows, Android, iOS, Linux и т. д.).
Android и iOS (или любая другая мобильная платформа) - это основные проблемы, которые у меня будут на 2 уровнях.
1 - Они оба ограничены зарядом батареи (тем более, что у ноутбука и настольного компьютера такой проблемы не должно быть вообще), поэтому любой метод, который я использую, должен учитывать это.
2 - NAT (сложнее, потому что пользователь имеет относительно меньший контроль над своим брандмауэром, чем в сети, в которой он работает).Мой центральный сервер будет вести таблицу того, какое устройство имеет какой IP-адрес, но насколько я понимаю, если есть NAT или брандмауэр, он не сможет получить к нему доступ, если порт не был переадресован.
Поскольку я буду писать конкретный клиент для каждой ОС, я предпочитаю более универсальное решение.Я склонялся к написанию чрезвычайно простого HTTP-сервера, который сидит на каждом клиенте и принимает запросы (которые может отправлять appengine) и обрабатывает их как сообщения, которые предупреждают клиента о выполнении действия (с сервером или другим клиентом).Однако я сталкиваюсь с проблемой NAT / firewall.Например, если appengine необходимо отправить сообщение на AndroidDevice1, оно получит свой IP-адрес из таблицы и сделает запрос к нему.Однако это не работает, если порты не перенаправлены правильно, и если пользователь находится на 3g / 4g, брандмауэр контролируется поставщиком данных.
Из-за этого я начал думать об использовании Android C2DMно мне нужно решение, которое я мог бы реализовать на разных платформах.
Единственный другой метод, о котором я мог подумать, - это просто запросить у клиента запрос на сервер.Это имеет проблемы с питанием от батареи и сети.
Был бы какой-либо другой способ реализовать это, и если нет, какой из вышеперечисленных методов лучше всего подходит для баланса между удобством использования, мощностью и потреблением данных и пользовательским вводом (чем меньше пользователь должен сделать, чтобынастроить клиент (т.е. переадресацию портов и т. д.) лучше)?Обратите внимание, что я не намерен превращать это в дискуссию / пламенную войну, а в логическое изложение фактов.
Заранее спасибо!