Я реализовал функцию обмена мгновенными сообщениями / чата в Интернете, используя привязку http и ejabberd. Для ленивых вот короткая версия моего вопроса:
Как бы вы подошли к реализации веб-клиента чата XMPP, который мог бы отображаться в нескольких окнах браузера одновременно, каждое из которых отображало бы идентичное представление открытых чатов?
Подробный бред для интересующихся:
Одним из возможных решений было бы просто позволить каждой вкладке управлять своим собственным соединением. XMPP имеет достойную поддержку для нескольких клиентов, поэтому пусть он выполняет маршрутизацию. У меня есть как минимум 2 проблемы с этим решением. 1 — это очевидное увеличение потребления полосы пропускания, которое это может вызвать. 2 — это текущее отсутствие поддержки нескольких клиентов с одним и тем же JID для подключения к комнатам MUC в ejabberd. Это, по-видимому, будет реализовано для 3.1, но для меня это серьезная проблема в ее нынешнем виде.
Первоначально я задавался вопросом, может ли быть задействована какая-то флеш-магия, но кажется, что swf на странице используется только для воспроизведения звуковых эффектов уведомлений. Вы можете подтвердить это, используя firebug или аналогичный инструмент для удаления тега внедрения. Функция чата по-прежнему работает.
Это в основном оставляет мне файлы cookie как единственный способ поделиться между вкладками. В этом сценарии основная вкладка будет сбрасывать все сообщения в файлы cookie, которые можно будет опрашивать с других вкладок. Мне это кажется довольно нелепым, поскольку частота опроса должна быть исключительно высокой, чтобы избежать задержки. Что произойдет, если «главное» окно будет закрыто?
Я видел, как это делается более чем на одном сайте, и обычно, когда я смотрю на такие проблемы, я могу, по крайней мере, смутно понять, как я буду это делать, но я не против признать, что этот поставил меня в тупик.