Я реализовал с помощью сообщения углерода. 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>
Вам необходимо извлечь оригинальное сообщение из переадресованной строфы. Также обратите внимание, что вы можете использовать каждую вкладку браузера как отдельный ресурс. Вы также можете настроить максимальное количество ресурсов, которое сервер может обрабатывать одновременно для пользователя.