XMPP组件:仅在JID在线时发送消息

3
我正在使用http://xmppjs.prosody.im/编写一个XMPP组件。我想向JID发送消息,但仅在用户在线时才发送。实现这一目标的最快/最有效的方法是什么?
我希望能够检测到此情况,以便例如在用户离线时发送电子邮件。
1个回答

4
发送消息时,无论JID是否在线,都应该使用type='headline'。如果收件人不在线,标题消息不应该被存储以供以后发送。
这种方法比其他任何方法都更快速和便携。
如果您必须根据用户的在线状态执行不同的操作,则需要订阅该用户的在线状态。
<presence type='subscribe' from='my.component' to='user@domain'/>

用户需要接受您的请求:
<presence type='subscribed' to='my.component' from='user@domain'/>

用户还可以订阅你的组件:
<presence type='subscribe' to='my.component' from='user@domain'/>

您可以自行决定如何处理这些内容;最简单的方法就是直接接受它们。
<presence type='subscribe' from='my.component' to='user@domain'/>

每次当你需要他们的存在或者每次你的组件启动时,它都需要向该用户发送探针:

<presence type='probe' from='my.component' to='user@domain'/>

您将获得每个用户资源的存在状态。无法确定何时完成。如果您想在用户离线时采取操作,只需选择一个超时值,然后在接收到存在状态时停止计时器。由于用户已经离线,额外的延迟通常不是一个大问题。
请注意,如果您上面接受了用户的存在订阅,那么您将从该用户获得探测;您可以忽略它们,或者响应一个描述您操作状态的存在状态数据包。

XMPP组件能否代表用户发送Stanza(例如,已订阅)? - Jus12
这取决于服务器。您必须能够通过发送用户服务器上的业务逻辑路由订阅,而正常的组件协议不允许这样做。 - Joe Hildebrand
我假设用户和组件连接到同一台服务器。 - Jus12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接