Сбросьте соединение XMPP, если страница обновляется
Я пытаюсь создать прямое соединение с XMPP, используя javascript с моим сервером ejabberd, я могу установить соединение при загрузке страницы и отключиться при нажатии кнопки разъединения.
теперь проблема в том, что соединение живо, и если пользователь случайно обновляет страницу, то мой javascript пытается снова установить соединение, и в ответ на это я получаю. (это только потому, что предыдущее соединение может быть еще живым)
<body xmlns='http://jabber.org/protocol/httpbind'>
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
<not-authorized/>
</failure>
</body>
и через некоторое время, если я обновлю страницу снова, тогда соединение будет установлено успешно, так как я могу сбросить соединение в случае, если страница была случайно обновлена, чтобы пользователь получил бесшовное соединение.
2 ответа
Если вы хотите, чтобы соединение сохранялось при обновлении страницы, сохраните jid
, sid
а также rid
переменные, а также любое другое нужное вам состояние в чем-то вроде sessionStorage. Вы можете использовать attach()
возобновить сеанс XMPP.
Я предполагаю, что вы входите в систему с тем же JID, который не допускается. Вам нужно установить случайный ресурс для вашего JID, чтобы избежать коллизий. Таким образом, вместо входа пользователя с помощью JID user@domain
Вы должны использовать JID user@domain/some_random_resource
,
Также в принципе вы также можете слушать onbeforeunload
и отключиться там. Это не будет работать с браузерами на основе webkit, но будет работать с остальными.