#xmpp
#xmpp
Вопрос:
Я пытаюсь написать реализацию XMPP-клиента (без чуши, прямое TCP-соединение).
пытаясь выяснить, как обрабатывать входящие сообщения в ответ на мои собственные запросы и узнать, какой ответ относится к какому запросу, большинство протоколов помечают запрос некоторым уникальным идентификатором, и сервер отправляет этот идентификатор вместе с ответом.
Я видел параметры ID для IQ stanzas, но сообщается, что они идентифицируют сеанс, а не уникальное сообщение…
каков наилучший способ решения этой проблемы?
Комментарии:
1. XMPP — это хорошо зарекомендовавший себя протокол. Почему бы не использовать библиотеку? xmpp.org/xmpp-software/libraries
2. Я, strophe.js но я внес коррективы, чтобы он работал на платформе на основе js без bosh, используя прямой tcp, поэтому мне нужно внести некоторые изменения, и возникла эта проблема..
Ответ №1:
Атрибут ID в строках IQ привязывает запрос (get или set) к ответу (результату или ошибке). Для каждого запроса следует использовать новый идентификатор. Это способ отслеживать ответы на каждый запрос.
Комментарии:
1. помню, что в RFC я читал, что атрибут ID относится к сеансу, а не к предварительному сообщению, я неправильно понял?
2. Атрибут ID указывается для каждой строки (сообщения), а не для каждого сеанса
Ответ №2:
В новом RFC 6120 содержится хорошее описание того, как работают IQS. Убедитесь, что вы сопоставляете отправителя и идентификатор полученной строки, чтобы кто-то другой не угадал ваши идентификационные номера. Типичным шаблоном является использование IQtracker, который вы вызываете следующим образом (псевдокод):
iq = create_xml_dom_that_is(<iq id='[counter ]' type='get' to='receiver'/>)
track(iq, callback)
где обратный вызов вызывается, когда мы получаем строку iq от получателя с ожидаемым идентификатором, или когда достигнут некоторый промежуток времени без получения ответа.