【问题标题】:xmpp component: only send message if jid is onlinexmpp 组件:仅当 jid 在线时才发送消息
【发布时间】:2010-08-26 12:50:44
【问题描述】:

我正在使用http://xmppjs.prosody.im/ 编写一个 xmpp 组件。我想向 jid 发送消息,但前提是用户在线。实现这一目标的最快/最有效的方法是什么。

我想检测这一点,例如当用户离线时我可以发送电子邮件。

【问题讨论】:

    标签: xmpp


    【解决方案1】:

    发送消息,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'/>
    

    然后,您将恢复每个用户资源的存在。没有办法告诉你什么时候完成。如果您想在用户离线时采取行动,您只需选择一个超时值,然后在您收到在线状态时停止计时器。由于用户无论如何都处于离线状态,因此额外的延迟通常不是什么大问题。

    请注意,如果您接受了上述用户的出席信息订阅,您将收到该用户的探测;你可以忽略它们,或者用一个描述你的操作状态的存在节来回应。

    【讨论】:

    • XMPP 组件能否代表用户发送节(例如,订阅)?
    • 这取决于服务器。您必须能够通过发送用户服务器上的业务逻辑来路由订阅,这是普通组件协议所不允许的。
    • 我假设用户和组件连接到同一个服务器。
    猜你喜欢
    • 2019-08-08
    • 2015-06-02
    • 2020-01-29
    • 2014-09-01
    • 2011-05-31
    • 2013-04-04
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    相关资源
    最近更新 更多