保留 XMPP 连接
Posted
技术标签:
【中文标题】保留 XMPP 连接【英文标题】:Preserving an XMPP connection 【发布时间】:2010-09-24 11:21:53 【问题描述】:我有一个监听 XMPP 服务器的 GChome 扩展。 我使用 Strophe 进行 BOSH 连接。 问题是“我应该如何处理连接?”从 XMPP 核心 wiki 中,我发现最后一个连接/优先级客户端接收消息。并且当用户从其他地方登录时,扩展程序停止接收消息。我该如何管理这种连接缺失。我希望这个问题不是很模棱两可=)。
【问题讨论】:
当您提到“用户从其他地方登录”时,用户是否使用与扩展完全相同的资源登录?按照设计,XMPP 只允许每个用户每个资源 1 次登录(如果您在 2 个不同的地方作为不同资源登录,它会起作用。)但是,XMPP 服务器的管理员可以强制用户只能登录到XMPP 服务器一次 - 这完全取决于配置。 【参考方案1】:确保为每个连接使用不同的资源。最简单的方法是让服务器生成资源名称,如RFC 3920bis, section 7.5 中指定的那样,让您的客户端发送:
<iq id='tn281v37' type='set'>
<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>
</iq>
并观察服务器以生成的完整 Jabber ID 进行响应:
<iq id='tn281v37' type='result'>
<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>
<jid>
juliet@im.example.com/4db06f06-1ea4-11dc-aca3-000bcd821bfb
</jid>
</bind>
</iq>
请记住,服务器可能会强制执行最大数量的资源,因此您可能会收到错误消息:
<iq id='wy2xa82b4' type='error'>
<error type='wait'>
<resource-constraint
xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
</error>
</iq>
【讨论】:
以上是关于保留 XMPP 连接的主要内容,如果未能解决你的问题,请参考以下文章