【发布时间】:2010-08-26 12:50:44
【问题描述】:
我正在使用http://xmppjs.prosody.im/ 编写一个 xmpp 组件。我想向 jid 发送消息,但前提是用户在线。实现这一目标的最快/最有效的方法是什么。
我想检测这一点,例如当用户离线时我可以发送电子邮件。
【问题讨论】:
标签: xmpp
我正在使用http://xmppjs.prosody.im/ 编写一个 xmpp 组件。我想向 jid 发送消息,但前提是用户在线。实现这一目标的最快/最有效的方法是什么。
我想检测这一点,例如当用户离线时我可以发送电子邮件。
【问题讨论】:
标签: xmpp
发送消息,type='headline',不管JID是否在线。如果收件人离线,则不应存储标题消息以供以后发送。
这种方法比其他任何方法都更快、更便携。
如果您必须根据用户是否在线执行不同的操作,则需要订阅该用户的在线状态:
<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'/>
然后,您将恢复每个用户资源的存在。没有办法告诉你什么时候完成。如果您想在用户离线时采取行动,您只需选择一个超时值,然后在您收到在线状态时停止计时器。由于用户无论如何都处于离线状态,因此额外的延迟通常不是什么大问题。
请注意,如果您接受了上述用户的出席信息订阅,您将收到该用户的探测;你可以忽略它们,或者用一个描述你的操作状态的存在节来回应。
【讨论】: