Сбросьте соединение 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, но будет работать с остальными.

Другие вопросы по тегам