Поддержка нескольких окон для одного пользователя - чат XMPP с использованием strophe.js - PullRequest
0 голосов
/ 06 марта 2019

У меня есть клиент чата, который может быть встроен в несколько хостов, клиент чата независим.

Пользователь A входит в два места - скажем, Chrome и Firefox

Таким образом, пользователь A отправляет сообщение пользователю B, пользователь B получает сообщение, сообщение чата отображается с обеих сторон.

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

Так же, как если вы откроете окно чата Gmail в нескольких браузерах, отправленное сообщение будет отправлено с обоих концов.

Ответы [ 3 ]

0 голосов
/ 08 марта 2019

Я использую сообщение углерод. Существует плагин, предоставленный Strophe. - строфоуглерод

0 голосов
/ 23 апреля 2019

Я реализовал с помощью сообщения углерода. XEP дается здесь . Чтобы это работало, вам нужно проверить, поддерживает ли сервер этот XEP. Большинство серверов, Ejabberd, MongooseIM, Openfire и т. Д., Поддерживает расширение. Сервер перенаправит сообщение carbon каждому ресурсу. После того, как вы включили углеродные сообщения на своем сервере, все, что вам нужно, это позаботиться о строфе, которая пересылается вам из каждого ресурса для JID.

Допустим, что JID для пользователя A и пользователя B - userA@domain.com и userB@domain.com, и вы входите в Chrome и Firefox, используя полные JID ниже:

  • userA@domain.com/chrome
  • userA@domain.com/firefox

Теперь, когда вы начнете отправлять сообщение пользователю B из chrome, оно будет отправлено на ваш XMPP-сервер, который затем также отправит это сообщение в ваш браузер Firefox. Допустим, оригинальное сообщение, отправленное из Chrome, выглядит следующим образом:

<message xmlns='jabber:client'
     from='userA@domain.com/chrome'
     to='userB@domain.com'
     type='chat'>
 <body>What man art thou that, thus bescreen'd in night, so stumblest on my counsel?</body>
  <thread>0e3141cd80894871a68e6fe6b1ec56fa</thread>
</message>

Вы должны получить отправленную строфу в своем Firefox следующим образом:

 <message xmlns='jabber:client'
         from='userA@domain.com'
         to='userA@domain.com/firefox'
         type='chat'>
  <received xmlns='urn:xmpp:carbons:2'>
    <forwarded xmlns='urn:xmpp:forward:0'>
      <message xmlns='jabber:client'
               from='userA@domain.com/chrome'
               to='userB@domain.com'
               type='chat'>
        <body>What man art thou that, thus bescreen'd in night, so stumblest on my counsel?</body>
        <thread>0e3141cd80894871a68e6fe6b1ec56fa</thread>
      </message>
    </forwarded>
  </received>
</message>

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

0 голосов
/ 06 марта 2019

Протокол XMPP определяет JID следующим образом:

JID состоит из трех основных частей:

Идентификатор узла (необязательно) Идентификатор домена (обязательно) Идентификатор ресурса (необязательно) JID кодируется в кодировке UTF-8. Грамматика будет быть представленными вначале с последующим конкретным уточнением и дальнейшим ограничительные замечания.

или на более простом языке, из которого вы построили JID: Username@YourDomain.com/Resource

один пользователь может иметь много ресурсов, например:

  • prashantsahni@domain.com/phone
  • prashantsahni@domain.com/firefox
  • prashantsahni@domain.com/chrome

просто каждый раз настраивайте подходящий ресурс для пользователя и позволяйте XMPP-серверу позаботиться обо всем остальном.

и вы можете посмотреть этот пост , чтобы узнать, как это сделать с помощью strophe

Вы можете прочитать об этом здесь: https://xmpp.org/extensions/xep-0029.html

...