【发布时间】:2020-04-10 06:21:50
【问题描述】:
我正在使用 Ejabberd 19.09 和 mucsub 进行持久的群组对话。
当组的成员发送不可用状态时,有时服务器根本没有响应。 如果我们在存在不可用之前发送一个可用的存在之后重复相同的测试,则服务器会响应。 无论如何,显然,我们的房间入住率没有变化。
这是预期的行为吗?
第一次测试:
重现第一个测试的步骤:
- admin
test1创建房间roomX(仅限会员)
<!-- [CREATE ROOM] | test1 -->
<iq from='test1@x.com' to='roomX@conference.x.com' type='set' id='1111111'>
<subscribe xmlns='urn:xmpp:mucsub:0' nick='test1'>
<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' /><event node='urn:xmpp:mucsub:nodes:subscribers' /><event node='urn:xmpp:mucsub:nodes:presence' />
</subscribe>
</iq>
- admin
test1邀请并订阅用户test2
<!-- [INVITE test2] | test1 -->
<message from='test1@x.com' id='33333' to='roomX@conference.x.com'>
<x xmlns='http://jabber.org/protocol/muc#user'>
<invite to='test2@x.com'><reason>REASON</reason></invite>
</x>
</message>
<!-- [SUBSCRIBE test2 TO ROOM] | test1 -->
<iq from='test1@x.com' to='roomX@conference.x.com' type='set' id='222222'>
<subscribe xmlns='urn:xmpp:mucsub:0' jid='test2@x.com' nick='test2'>
<event node='urn:xmpp:mucsub:nodes:messages' /><event node='urn:xmpp:mucsub:nodes:presence' /><event node='urn:xmpp:mucsub:nodes:subject' /><event node='urn:xmpp:mucsub:nodes:config' /><event node='urn:xmpp:mucsub:nodes:subscribers' /><event node='urn:xmpp:mucsub:nodes:presence' />
</subscribe>
</iq>
- 邀请被自动接受,用户
test2现在是房间成员,他可以发送消息并订阅所有活动 - 成员
test2想放弃房间,并发送出席信息类型=不可用
<!-- [test2 leaves the room] | test2 -->
<presence to='roomX@conference.x.com/test2' from='test2@x.com' type='unavailable'>
<status>leave</status>
</presence>
结果:
- 服务不响应会员
- 房间入住率没有变化:会员的隶属关系仍然 “会员”,角色仍然是“会员”,订阅仍然有效
第二次测试:
重现第二次测试的步骤:
- admin
test1创建房间roomX(仅限会员) - admin
test1邀请并订阅用户test2 - 邀请被自动接受,用户
test2现在是房间成员,他可以发送消息并订阅所有活动 - 成员
test2发送出席信息 type=available(理论上这是多余的,但它是作为测试的一部分故意制作的)
<!-- [test2 JOINS THE ROOM] | test2 -->
<presence from='test2@x.com' id='n13mt3l' to='room@conference.x.com/test2'>
<x xmlns='http://jabber.org/protocol/muc'/>
</presence>
- 成员
test2想要放弃房间,并发送出席信息类型=不可用
结果
- 服务响应成员
- 房间入住率没有变化:会员的隶属关系仍然 “会员”,角色仍然是“会员”,订阅仍然有效
【问题讨论】:
标签: xmpp ejabberd multiuserchat