Если вы хотите знать, подключен ли объект XMPP или нет, вы можете использовать XMPP Ping ( XEP-0199 ).Ниже приведен пример двух пользователей xmpp «user1» и «user2».Их нет в списке друг друга.Я использую ejabberd и PSI для приведенного ниже примера.
- «user2» пингует «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" />
- «пользователь2» пингует «пользователя1» (пользователь 1 находится в автономном режиме. Ответ пинга приводит к типу= ошибка)
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>