查询XMPP中的存在

时间:2011-08-09 18:29:50

标签: xmpp user-presence

默认情况下,XMPP在线状态会发布给所有订阅该人的人。是否有可能发送类似iq调用的内容来获取我名单中不存在的id的状态标记?

4 个答案:

答案 0 :(得分:6)

如果您只想知道XMPP实体是否已连接,则可以使用XMPP Ping(XEP-0199)。下面给出了两个xmpp用户“user1”和“user2”的示例。他们不在彼此的烘焙名单上。我在下面的例子中使用了ejabberd和PSI。

  • “user2”ping“user1”(user1在线)

<强> IQ:

<iq from='user2@pdevdv3os18f.corp.intuit.net' 
to='user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>

<强>响应:

<iq from="user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" type="result" xml:lang="en" to="user2@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" id="e2e1" />

  • “user2”ping“user1”(user1处于离线状态.ping的响应导致type = error)

<强> IQ:

<iq from='user2@pdevdv3os18f.corp.intuit.net' 
to='user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>

<强>响应:

<iq from="user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" type="error" xml:lang="en"     to="user2@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" id="e2e1" >
<ping xmlns="urn:xmpp:ping"/>
<error type="cancel" code="503" >
<service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>

答案 1 :(得分:4)

我不这么认为。请查看rfc,第5.1.3节。具体来说,它说:

  

从用户收到在线探测后,联系人的服务器
  我们应该回复如下:

     

如果用户不在订阅的联系人名单中          “From”,“From + Pending Out”或“Both”的状态(如定义的那样)          在订阅状态(第9节)下,联系人的服务器   必须          返回“错误”类型的存在节以响应          存在探测。

您可能会在回复中收到错误或被禁止。

答案 2 :(得分:1)

rfc表示不允许您接收名单上不存在的身份证明。

但我相信可以通过修改服务器来查询状态(如果有一个允许的xmpp服务器)

答案 3 :(得分:0)

没有

  • 存在已订阅,未查询。当你得到了 回答你的问题,信息将陈旧。
  • 存在是个人信息。您必须明确授权联系人查看。