#javascript #xmpp #strophe
#javascript #xmpp #strophe
Вопрос:
Я написал клиент XMPP с помощью jQuery Strophe. Все это работает хорошо (1 на 1, присутствие, MUC и т. Д.) И Содержится в jQuery-плагине. Однако, когда страница выгружается, она отправляет 2 заключительных запроса с тем же rid. Это только недавно стало проблемой, когда я начал работать над вложением сеанса.
Вот пример консоли Firebug:
Здесь я только что вошел в систему и сразу же обновил страницу. Первое сообщение, которое вы видите, — это начальная строка присутствия после входа в систему. После этого запроса начался новый запрос BOSH, чтобы поддерживать соединение с сервером открытым. Этот запрос прерывается при обновлении страницы. Пока все идет так, как я ожидал.
Однако после прерванного запроса strophe отправляет еще один запрос с тем же самым RID. Последний запрос отправляется из strophe для (я полагаю) хороших манер и не имеет отношения к проблеме. Однако его ответ указывает, что openfire (XMPP-сервер) прервал сеанс в попытке защитить учетную запись.
Я просмотрел свой код и не могу найти ни одного запроса, сделанного от моего имени. Я совершенно уверен, что strophe отправляет этот запрос. Однако это должно быть связано с тем, что я сделал, поскольку в моем первоначальном прототипе такой проблемы не было (на самом деле, мне часто приходилось вручную завершать сеансы на панели администратора, потому что я забывал закрывать их через клиент).
Есть ли какие-либо известные проблемы, которые я должен проверить, прежде чем публиковать код-нарушитель?
Ответ №1:
Я вернулся к рабочему прототипу, но обнаружил, что в нем также была та же ошибка. После небольшого тестирования я обнаружил, что это происходит только после того, как я немедленно обновил страницу. Если запрос был сделан до обновления страницы, ошибка не возникает. Я сообщил об этом разработчику и сделал хак, чтобы заставить его работать, пока он не будет исправлен на их стороне.
Обновить:
Я узнал, что это происходит только с Firefox. Safari и даже IE делают это правильно (т. Е. Не Выполняют двойную публикацию). Так что, возможно, это Firefox ведет себя плохо в конце концов!
ОБНОВЛЕНИЕ 2:
Я получил письмо с запросом о внесенных мной изменениях. Вот они.
В strophe.js примерно в строке 2566 измените
sendFunc();
Для
if (req.sends == 0) {
sendFunc();
}
Комментарии:
1. у меня это сработало, я не рекомендую менять файл библиотеки, но у меня не было выбора, это сделало свое дело. @Mike