我正在开发一个XMPP客户端,通过我们自己托管的ejabberd社区服务器(版本17.09)进行通信。
我无法实现MucSub功能(据我所知,从版本16.08开始支持)。
当我发送这个XML命令时(在ejabberd文档中描述订阅聊天室):
<iq from='hag66@shakespeare.example'
to='coven@muc.shakespeare.example'
type='set'
id='E6E10350-76CF-40C6-B91B-1EA08C332FC7'>
<subscribe xmlns='urn:xmpp:mucsub:0'
nick='mynick'
password='roompassword'>
<event node='urn:xmpp:mucsub:nodes:messages' />
<event node='urn:xmpp:mucsub:nodes:affiliations' />
<event node='urn:xmpp:mucsub:nodes:subject' />
<event node='urn:xmpp:mucsub:nodes:config' />
</subscribe>
</iq>
(当然为这个服务器输入现有的jid,对于这个聊天室,allow_subscription设置为true)我得到了结果:
<iq xml:lang='de'
to='hag66@shakespeare.example'
from='coven@muc.shakespeare.example'
type='error' id='E6E10350-76CF-40C6-B91B-1EA08C332FC7'>
<subscribe xmlns='urn:xmpp:mucsub:0' nick='mynick'>
<event node='urn:xmpp:mucsub:nodes:messages'/>
<event node='urn:xmpp:mucsub:nodes:affiliations'/>
<event node='urn:xmpp:mucsub:nodes:subject'/>
<event node='urn:xmpp:mucsub:nodes:config'/>
</subscribe>
<error code='503' type='cancel'>
<service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
<text xml:lang='de' xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>No module is handling this query</text>
</error>
</iq>
当我将查询更改为:
时<iq from='hag66@shakespeare.example'
to='coven@muc.shakespeare.example'
type='set'
id='E6E10350-76CF-40C6-B91B-1EA08C332FC7'>
<subscribe xmlns='urn:xmpp:mucsub:0'
nick='mynick'
password='roompassword'>
<event xmlns="http://jabber.org/protocol/pubsub#event" node="urn:xmpp:mucsub:nodes:messages" />
<event xmlns="http://jabber.org/protocol/pubsub#event" node="urn:xmpp:mucsub:nodes:affiliations' />
<event xmlns="http://jabber.org/protocol/pubsub#event" node="urn:xmpp:mucsub:nodes:subject' />
<event xmlns="http://jabber.org/protocol/pubsub#event" node="urn:xmpp:mucsub:nodes:config' />
</subscribe>
</iq>
我得到了结果:
<iq xmlns="jabber:client"
to="hag66@shakespeare.example"
xml:lang="en"
type="result"
from="coven@muc.shakespeare.example"
id="agsXMPP_8">
<subscribe xmlns="urn:xmpp:mucsub:0" nick="mynick" />
</iq>
我将其解释为查询成功。此外,当我查询Chatrooms时,此用户订阅了聊天室列表。
我现在的问题是:无论我使用哪种方法,如果用户不在此聊天室中,就不会收到该聊天消息的通知。
现在最奇怪的是:如果我从服务器获得DiscoInfo,则不会列出MucSub功能(urn:xmpp:mucsub:0),我不明白,因为服务器版本支持该功能我是默认情况下启用使用和根据文档,甚至无法禁用。
有没有人遇到同样的问题和/或知道如何解决它?
提前感谢您的帮助
答案 0 :(得分:0)
最后我们发现了这个问题:
而不是将请求发送到“coven@muc.shakespeare.example”,我们将其发送到“coven@shakespeare.example”,这些内容无法正常工作,并且忘记在问题文本中进行更改