Связь P2P в реальном времени между мобильными устройствами

Я создаю мобильное устройство, которое должно отправлять информацию в реальном времени на другие устройства. Я рассмотрел XMPP, но у меня нет сервера, поэтому связь должна быть только между устройствами.

Есть ли способ общаться с помощью XMPP между мобильными устройствами без сервера (или с помощью мобильных устройств в качестве серверов)?

Является ли Sockets хорошей идеей? Т.е. иметь серверный сокет и клиентский сокет и обмениваться информацией таким образом.

Есть ли более разумный способ? Я слышал о jWebSocket, но я действительно не знаю, как это работает, или если оно того стоит.

РЕДАКТИРОВАТЬ

Процесс выглядит следующим образом:

  1. Я использую Parse в качестве сервера / backend http://parse.com
  2. Когда пользователь запускает приложение, список пользователей извлекается с сервера анализа
  3. Затем пользователь имеет (может иметь) ip других клиентов, а затем пытается связаться с ними.

Проблемы
1. Parse не поддерживает сервер XMPP или другие типы серверов

Solutions Collecting From Web of "Связь P2P в реальном времени между мобильными устройствами"

Так вот что я, наконец, закончил:

Архитектура выглядит следующим образом

  • Каждый телефон имеет SocketServer, слушая соединение
  • На каждом телефоне есть BroadCastReceiver, который слушает изменение соединения с данными (если соединение потеряно или создано).
  • Каждый телефон может создавать сокеты для связи с другими телефонами
  • Сервер, на котором отображаются идентификаторы клиентов и клиент-ips

Теперь основной поток выглядит следующим образом

  1. Когда клиент (телефон) подключается к Интернету, BroadcastReceiver замечает это изменение и отправляет на сервер сообщение с его идентификатором и IP-адресом
  2. Сервер получает это, и как ответ возвращает идентификаторы списка (идентификаторы других зарегистрированных пользователей).
  3. Соединение выполнено vía java Sockets, я построил простой протокол для отправки параметров, подобных синтаксису http, сообщение имеет следующую форму:

    {my_id}:{methodName}?param1=val1&param2=val2&...&paramN=valN .

    В случае, если требуется сложный объект, я использую GSon для отправки параметра как целого объекта.

  4. Когда клиент отправляет сообщение, он должен указать идентификатор отправителя. Затем он запрашивает сервер для идентификатора, а затем сервер отвечает с помощью ip (этот ip затем кэшируется в клиенте с простым сопоставлением <ID,IP> ).

  5. Сообщение принимается сервером, который затем уведомляет об этом MessageReceivedListener s

Преимущество этого заключается в следующем:

  • Нет необходимости в сложном сервере: разработчики мобильных приложений (например, я) обычно не хотят тратить много времени на стороне сервера.
  • Телефоны обычно подключаются и отключаются от мобильных сетей очень часто, поэтому обычно требуется механизм для восстановления соединения (в этом случае BroadcastReceiver является тем, кто уведомляет сервер о том, что его IP-адрес был изменен, а другие телефоны просто запрашивают сервер) ,
  • Это простой протокол, поэтому синтаксический анализ выполняется довольно быстро, но при необходимости сложные объекты могут быть отправлены через GSon
  • Это отделяет проблемы: приложение никогда не знает IP других телефонов, просто их идентификаторы, которые в моем случае являются фактическими идентификаторами пользователей Facebook.
  • « MethoName », о котором я упоминал ранее в синтаксисе протокола, заставляет MessageReceivedListener подписываться только на одно «имя метода », поэтому они получают только сообщения, относящиеся к ним.

Любые предложения и критики приветствуются

Вы можете посмотреть на использование библиотеки клиентов IRC, например http://jerklib.wikia.com/wiki/JerkLib_Wiki . Таким образом, вы можете использовать открытый IRC-сервер для связи с другими устройствами …

Я не использовал его, но я сделал закладку для дальнейшего чтения, потому что я думал, что это новая концепция …

Я надеюсь, что это помогает…