2009-06-03 2 views
0

Один из контактов моего JABBER робота,трескотня проблема протокола

которого «подписка» значение атрибута «до»,

, который в соответствии с протоколом JABBER означают:

**** в робот подписался на онлайн статус абонента, но другая сторона не подписалась на мой робот. ****

но когда я войти на другой счет партии,

Я могу видеть, что робот онлайн,

Почему это так?

Является ли протокол jabber теперь в хаосе?

+0

Возможно, вы также должны пометить этот XMPP. –

ответ

1

Прошло некоторое время с тех пор, как я удалился с XMPP, но быстрое перечитывание спецификации заставил меня подумать, что у вас есть смысл «перепутаться». Если пользователь указан как «в» в списке роботов, это означает, что пользователь следит за присутствием роботов, а не наоборот. «from» означает, что робот следит - или получит строфы присутствия из - учетной записи пользователя.

Знаете ли вы, что выглядит для пользователя для списка? Если все синхронизировано, список пользователей должен иметь робота, указанного как «от».

+0

О, вы правы, я перепутал. Но через мою учетную запись робота я могу видеть учетную запись пользователя в сети, и я повторно подписался на эту учетную запись несколько раз, но все равно не влияю, скажем, «подписка» все еще 'to'. – omg

3

Если вы скажете: «Мой бот имеет подписку на берег» или «У берега есть подписка от моего бота», «от» и «до» будет иметь больше смысла.

Таким образом, если список бота имеет:

<item jid='[email protected]' subscription='to'/> 

Тогда бот будет видеть присутствие Шора, но берег не будет видеть наличие бота, считая, учетный берега; имеет:

<item jid='[email protected]' subscription='from'/> 

Это возможно для этих состояний выйти из синхронизации из-за проблем с сетью и тому подобного. В тех случаях, самый простой способ решить эту проблему, чтобы удалить элемент (который должен в конечном итоге эффективно удаление элемента на другой стороне), а затем повторно добавить (см RFC 3921bis, section 2.5.1 подробности):

<iq from='[email protected]/background' 
    id='delete_1' 
    type='set'> 
<query xmlns='jabber:iq:roster'> 
    <item jid='[email protected]' subscription='remove'/> 
</query> 
</iq> 
<presence type='subscribe' 
      from='[email protected]/background' 
      to='[email protected]'/> 

что даже если подписка находится в указанном направлении, бот МОЖЕТ посылать направленное присутствие на берег, и в этом случае берег будет видеть присутствие от обоих, даже если он не подписан на бота. Проверьте журнал протоколов бота, и вы увидите что-то вроде:

<presence to='[email protected]'/> 
+0

Отличное замечание! Вы сказали, что когда проблема с сетью или что-то подобное, быстрое исправление заключается в удалении на «обе стороны», а затем повторное добавление. Но практически другая сторона является пользователем, поэтому она кажется немного неприменимой? Есть ли другое решение? – omg

+0

Если вы удаляете со своей стороны, он должен удалить с другой стороны достаточно, чтобы все было исправлено. В ответ я добавил примеры протоколов. –

+0

Спасибо, Джо!И еще один вопрос: иногда, если другой sider отказался принять вашу подписку в первый раз, последующие подписки никогда не будут работать, как это исправить? – omg

Смежные вопросы