XMPP: Как запросить сервер для присутствия состояния контактов пользователя?

StackOverflow https://stackoverflow.com/questions/4029924

  •  26-09-2019
  •  | 
  •  

Вопрос

У нас есть сайт, и мы разработали систему чата для него, используя библиотеку Strophe.js и сервер Ejabberd XMPP. Мы используем сеансовое вложение, которое было начато с PHP (используя внутреннюю библиотеку). То, что мы делаем, это получить избавление и SID из сценария PHP, затем используйте вложение сеанса Strophe. Сказанная избавление и SID хранятся на файле cookie, а значение избавления на cookie обновляется каждое обновление избавления на Strophe.js.

Это работает нормально, после регистрации мы получаем статус присутствия каждого из наших контактов. Проблема с этим, когда вы переходите на другую страницу на сайте, и прикрепите к употреблению избавления (мы используем увеличенное значение, полученное строфом) и SID, сервер больше не будет отправлять информацию о присутствии ваших контактов, в отличие от Когда вы вошли в систему. Это вызвало нашу зону контактов, чтобы открыть все невидимые, даже если они онлайн. Они появляются только в Интернете, если вы (или ваш контакт) выйти в систему в чате, а затем снова войдите в систему (так как вы получите обновление наличия с сервера XMPP).

Я написал обходной путь, где на наличии статус ваших контактов сохраняется в файле cookie (все онлайн-контакты будут сохранены в файле cookie), когда присутствие получено с сервера. Это проверяется на каждой загрузке страницы, если установлен файл cookie, он будет прочитан, и все дворники на cookie будут помечены как онлайн. Это работает нормально, но могут быть некоторые лучшие способы решения этого, используя поведение по умолчанию XMPP.

Это было полезно?

Решение

Серверы XMPP отправляют присутствие зондов на все ваши контакты от вашего имени, когда вы отправляете свое начальное присутствие на сервер. С тех пор вы получите только изменения наличия только от ваших контактов.

Если вы потеряете состояние наличия ваших контактов, вам нужно будет отправить свои зонды присутствия для восстановления этого состояния. Однако это, вероятно, не то, что вы хотите много делать, и проезжая вокруг состояния присутствия, вероятно, предпочтительнее в большинстве случаев.

Вы можете попробовать пропустить состояние через XMPP. Например, вы можете использовать частное хранилище XML (XEP-0049), PUBSUB (XEP-0060) или PEP (XEP-0163).

Другой вариант вместо файлов cookie для передачи его на стороне клиента - использовать объект HTML5 SharedWorker для удержания состояния.

Другие советы

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

Если вы хотите хранить больше состояния в браузере, и изолируйте себя из версии браузера, и вы уже используете jQuery, затем jstore. довольно мило.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top