Strophe отправляет двойной запрос на страницу выгрузки - PullRequest
4 голосов
/ 13 октября 2011

Я написал клиент XMPP с jQuery + Strophe. Все это работает хорошо (1-на-1, присутствие, MUC и т. Д.) И содержится в плагине jQuery. Однако, когда страница выгружается, она отправляет 2 финальных запроса с одним и тем же ридом. Это только недавно стало проблемой, когда я начал работать над прикреплением сессии.

Вот пример консоли Firebug:

enter image description here

Здесь я только что вошел и сразу обновил страницу. Первый пост, который вы видите - это начальный раздел присутствия после входа в систему. После этого запроса новый запрос BOSH начал держать соединение открытым для сервера. Этот запрос отменяется, когда я обновляю страницу. Пока все идет так, как я ожидал.

Однако после прерванного запроса strophe отправляет еще один запрос с тем же идентификатором RID. Окончательный запрос отправляется со строфы за (я полагаю) хорошие манеры и не имеет отношения к проблеме. Однако его ответ указывает, что openfire (сервер XMPP) убил сеанс в попытке защитить учетную запись.

Я просмотрел свой код и не могу найти ни одного запроса от моего имени. Я вполне уверен, что Strophe отправляет этот запрос. Тем не менее, это должно произойти из-за того, что я сделал, поскольку у моего первоначального прототипа такой проблемы не было (на самом деле мне часто приходилось вручную удалять сеансы на панели администратора, потому что я забыл закрыть их через клиент).

Есть ли какие-либо известные проблемы, которые я должен проверить, прежде чем публиковать код, вызывающий нарушение?

1 Ответ

2 голосов
/ 19 октября 2011

Я вернулся к работающему прототипу, но обнаружил, что у него тоже есть та же самая ошибка. После небольшого тестирования я обнаружил, что это происходит только после немедленного обновления страницы. Если запрос был сделан до обновления страницы, ошибка не возникает. Я проинформировал об этом разработчика и сделал хак, чтобы он работал, пока он не будет зафиксирован на их стороне.

UPDATE:

Я обнаружил, что это только происходит с Firefox. Safari и даже IE делают это правильно (т.е. не делайте двойной пост). Так что, возможно, в конце концов, это Firefox ведет себя плохо!

ОБНОВЛЕНИЕ 2:

Я получил письмо с просьбой о внесенных изменениях. Вот они.

В strophe.js около строки 2566 измените

sendFunc();

до

if (req.sends == 0) {
   sendFunc();
}
...