Как интегрировать Django и XMPP-over-BOSH
Мне нужен совет по настройке среды, основанной на Django и XMPP.
Мой сайт состоит из двух частей.
Часть A: пользователи используют встроенный в браузер клиент XMPP, такой как Strophe.JS, на странице, которая обслуживалась через Django.
Часть B: Используется другим набором пользователей для общения с пользователями, которые общаются с использованием части A сайта. Здесь пользователи также будут использовать XMPP-клиент в браузере, например Strope.JS, на странице, которая является сервером через Djano.
Поскольку связь происходит в браузере, я не буду использовать реальный поток XMPP, а XMPP поверх BOSH. Я читал, что XMPP через BOSH де-факто является способом передачи сообщений XMPP через HTTP-интерфейсы.
Решение для части A простое. Обычная веб-страница с добавленной библиотекой Strophe.JS. Мне кажется, что сложная часть состоит в том, чтобы выяснить, как обращаться с пользователями части B. Мне нужно передавать сообщения XMPP между пользователями части A и пользователями части B. Пользователи части B должны иметь доступ к информации из системы Django для пользователя части A. Мне нужна довольно хорошая интеграция между XMPP и Django.
Может кто-нибудь сказать мне, как я написал бы такую систему? Какие инструменты я бы использовал? Могу ли я использовать автономный сервер XMPP и интегрировать его в Django? Если да, то? Когда пользователь в части A начинает сеанс чата, он будет отображаться для пользователя части B сайта, но какой пользователь будет обрабатывать запрос чата пользователя, будет зависеть от некоторой информации, полученной из Django.
Спасибо всем заранее.
1 ответ
Вам определенно понадобится отдельный Jabber/XMPP сервер (например, ejabberd). Я сделаю дикое предположение, что пользователи части A общаются в чате A (MUC), а те же пользователи в части B общаются в чате B. Вам нужно написать 3 сценария / демона (я использую perl и Net::Jabber (Net::XMPP не может присоединиться к MUC)). Это были бы: scripta, scriptb, медиатор.
script / daemon A присоединится к комнате MUC A, в то время как посредник является частью его реестра. Он будет прослушивать все разделы сообщений, но будет реагировать только на некоторые (например, раздел сообщений с телом "SendToB MSG"). Это сообщение отправлено пользователем, присоединившимся к комнате чата A. Затем "RelayToB MSG" следует отправить посреднику с помощью scripta (From: scripta@jabberserver.dom, To: mediator@jabberserver.dom). Посредник отправит MSG "RelayFromA" в MUC B на основе части "RelayToB" тела раздела сообщения. scriptb получит "RelayFromA MSG" и отправит "MSG" в чат-комнату B.
script / daemon B (та же логика) с mediator@jabberserver.dom в реестре пользователей.
Посредник не присоединится ни к одному чату. В его списке будут присутствуют scripta@jabberserver.dom и scriptb@jabberserver.dom. Он будет только передавать сообщения между чатами.
Я уже разместил здесь пример кода. Как создать службу Jabber/XMPP proxy/logging?, Код будет применять scripta / b. Код довольно длинный, и убедитесь, что вы проверяете подпрограммы InMessage и InPresence. Другие вещи касаются моих потребностей.
Я надеюсь, что я был достаточно ясен. Не стесняйтесь задавать больше вопросов.
РЕДАКТИРОВАТЬ:
- Создайте скрипт, используя perl и Net::Jabber. Пользователь, который будет входить на сервер XMPP, будет mediator@jabberserver.dom. Каждый сможет отправлять ему сообщения. Посредник будет пересылать сообщения специалисту службы поддержки в формате (From:user1 MSG). Служба поддержки ответит на mediator@jabberserver.dom с сообщением (Ответ: пользователь1 ОТВЕТИТЬ). Посредник направит ОТВЕТ пользователю1.
- Проверьте mod_shared_roster здесь http://www.ejabberd.im/shared-roster-all (пример 4) и здесь http://www.process-one.net/docs/ejabberd/guide_en.html.
Я думаю, что 2-е решение не потребует дополнительного кодирования, кроме кода javascript/strophe на вашей странице.