Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xmpp组件:仅在jid联机时发送消息_Xmpp - Fatal编程技术网

xmpp组件:仅在jid联机时发送消息

xmpp组件:仅在jid联机时发送消息,xmpp,Xmpp,我正在使用编写一个xmpp组件。我想向jid发送消息,但前提是用户在线。实现这一目标的最快/最有效的方法是什么 我希望检测到这一点,例如,当用户脱机时,我可以发送一封电子邮件。发送带有type='headline'的消息,而不管JID是否联机。如果收件人处于脱机状态,则不应存储标题邮件以供以后发送 这种方法比你能做的任何事情都更快、更便于携带 如果您必须根据用户是否在线执行不同的操作,则需要订阅该用户的状态: <presence type='subscribe' from='my.comp

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


我希望检测到这一点,例如,当用户脱机时,我可以发送一封电子邮件。

发送带有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组件是否可以代表用户发送状态节(例如,已订阅)?这取决于服务器。您必须能够通过发送用户服务器上的业务逻辑路由订阅,这是正常组件协议不允许的。我假设用户和组件连接到同一服务器。