Часть 1: Решение вашей проблемы
См. Часть 2 ниже, если вам действительно нужно отслеживать клиентские подключения, но я не уверен, исходя из вашего вопроса, решит ли то, о чем вы просите, вашу проблему.
Позвольте мне посмотреть, могу ли я повторить вашу проблему: вы пишете приложение для чата, но оно предназначено для сайта, который не полностью поддерживает AJAX (как, скажем, gmail); сайт содержит навигацию по страницам, где вам может потребоваться перенастроить свой канал после того, как пользователь нажмет ссылку на другую страницу. Когда пользователь перемещается, отображается новая страница, и вы хотите избежать получения нового маркера в этот момент; вы хотите повторно использовать существующий токен и канал с тем же идентификатором клиента.
Если это так, у меня есть два альтернативных решения: одно простое, но не очень удобное для пользователя, другое сложнее, но с гораздо более плавным конечным результатом.
Сохраните токен в файле cookie. Когда вы повторно отображаете свою страницу, просто используйте токен из файла cookie вместо повторного вызова channel.create_channel. Когда срок действия токена истечет, вы получите обратный вызов onerror, как если бы пользователь остался на исходной странице; в этот момент снова вызовите channel.create_channel. Проблема с этим заключается в том, что повторное подключение может быть медленным (до 10 секунд или более в плохих случаях) из-за характера соединений Comet.
Оберните весь свой сайт, не связанный с чатом, в iframe. Поместите код создания канала и пользовательский интерфейс во внешний iframe. Таким образом, вам не нужно повторно подключаться каждый раз, когда пользователь перемещается. Это позволяет избежать простоев в навигации. Обратите внимание, что orkut использует эту технику с плавающими элементами div, как показало небольшое исследование Firebug.
Часть 2: Ваш запрос функции
Если выяснится, что я неправильно понимаю, и вам действительно нужно отслеживать клиентские соединения:
Нет встроенного способа проверить, подключен ли клиент к каналу, идентифицированному идентификатором клиента.
Однако прямо сейчас я работаю над добавлением «присутствия» (в смысле чата), чтобы ваше приложение могло зарегистрироваться для получения сообщения, когда клиент подключается к каналу, созданному с заданным идентификатором клиента, или отключается от него. Вы также можете «прощупать» присутствие, чтобы узнать, подключен ли данный идентификатор клиента или нет (все еще работая над деталями этой части).
Обратите внимание, что это будет не токен, а идентификатор клиента.
У меня пока нет точной даты релиза, но, как я уже сказал, я активно работаю над этим прямо сейчас.
Тем временем вы можете использовать HTTP-запрос Heartbeat от вашего клиента обратно к вашему приложению, который говорит: «Эй, я все еще здесь» каждую минуту или около того. Вам понадобится какая-то задача, которая запускается, скажем, каждые 2 минуты и помечает всех клиентов, которые не зарегистрировались, как неактивные, и вам нужно будет где-то хранить эти данные.
person
Moishe Lettvin
schedule
26.01.2011