2017-01-13 1 views
1

Я реализовал веб-чат с помощью xmpp + openfire + strophe. На том же сервере openfire и xmpp мы также разработали чат IOS.Xmpp, Strophe Js: Несколько активных подключений для одного и того же пользователя

Я столкнулся с проблемой ниже.

Допустим, пользователь Подключенный в XMPP в приложении IOS и пользователь чата с пользователем B. Теперь же пользователь А соединиться с веб-чата с XMPP с помощью строфы и пользователя B посылает сообщение пользователю А затем пользователь А будет имеют сообщение только в веб-чате.

Теперь пользователь A подключится к xmpp в IOS и в сообщении пользователя B, тогда пользователь A получит сообщение только в приложении IOS, а не в веб-чате.

Возможно ли, что пользователь A будет иметь сообщение при всех создаваемых соединениях?

Возможно ли, что у пользователя будет несколько соединений xmpp, и все соединения смогут отправлять сообщения другому пользователю и могут получать сообщения во всех соединениях пользователя?

Не могли бы вы помочь мне решить эту проблему в Strophe Js и IOS?

ответ

2

Вы можете управлять им, установив разные РЕСУРСЫ (https://wiki.xmpp.org/web/Jabber_Resources). Каждое устройство должно объявлять другой ресурс («myPc», «android», «iphone», «ipad», «Spark», это просто произвольная строка).

Openfire необходимо настроить для управления несколькими ресурсами (Server -> Настройки сервера -> Политика ресурсов).

EDIT: Openfire также имеет систему доставки с приоритетом, которая выбирает ресурс с наивысшим приоритетом и отправляет только сообщение. (хорошая дискуссия: https://community.igniterealtime.org/thread/53377) Включить, установив свойство:

route.all-resources 

к

true 

По этому вопросу, вам нужно также Openfire server, multiple connection, route.all-resources doesn't work

route.really-all-resources 

выставиться в

true 

КАК СДЕЛАТЬ:

  • по базе данных, добавив в таблицу "ofProperty" оба свойства
  • или OpenFire веб-клиент -> Сервер -> Диспетчер сервера -> Система Property (добавить в нижней части страницы).

Имейте в виду, что

  1. Наличие имеет приоритет (число от -128 до 128), по умолчанию это 1. Тщательно изменить это число.
  2. , конечно, клиенты должны не включать ресурс при отправке сообщение (это ваше дело, но обратите внимание, чтобы сохранить правильное поведение )

Я сожалею о том, но я не знаю, как для назначения имени ресурса в Strophe.js, как я вижу в некоторых примерах, программисты просто добавляют его вручную как строку concat ([email protected]/resource во время входа в систему)

+0

Спасибо за ваш ответ. Я связал два разных ресурса в xmpp через strophe, но сообщения поступают только по последним соединениям. Я хочу получать и отправлять сообщения по каждому подключению одного и того же пользователя. Это возможно? –

+0

Как насчет openfire? Какой вариант вы выбрали? Однако проверьте, как вы добавляете слушателя в своих клиентов, может быть, это только о том, что вы пропустите слушателя из-за промаха состояния при создании чата. – MrPk

+0

В openfire «Сервер -> Настройки сервера -> Политика ресурсов» на этой странице, которую я выбрал вариант «Never Kick». –

Смежные вопросы