2010-09-07 3 views
3

Я ищу, чтобы включить две функции в мое приложение, используя xmpp. Первый - это индивидуальный чат, который почти завершен (с использованием строфы), а второй - в режиме реального времени, только так, как он работает в facebook. Я попытался понять систему pubsub в xmpp, но не чувствую, что это подойдет именно этой проблеме. Пожалуйста, исправьте, если это неправильно, возможно, из-за неправильного понимания понятий. Мое требование таково: . Предусмотрены предопределенные события, которые могут быть у кого-либо из пользователей, и когда это делается, другие, кто в сети, должны получать уведомление для него. Кроме того, я также хотел бы проверить, предпочитает ли пользователь получать уведомления или нет, прежде чем отправлять их. То, что я не получаю здесь, - это использование pubsub, где и как подходят узлы. Могу ли я создать только один узел, на который будут подписаться все остальные? В таком случае, как абоненты будут публиковать свои события на нем, не являясь владельцем узла?уведомления в режиме реального времени с использованием xmpp

Другой способ, о котором я думаю, - отправить сообщение в jids всех пользователей один за другим с типом заголовка или с дополнительной полезной нагрузкой, чтобы сказать, что <notif/> отличается от обычных сообщений. Является ли этот метод приемлемым для масштабирования?

ответ

0

Pubsub будет подходящим решением для этого случая. Он обрабатывает все ваши требования из того, что я вижу. Вам нужно будет настроить узел для каждого типа события, если вы ожидаете, что пользователи будут подписываться по-разному для каждого типа сообщений (альтернативно, фильтры могут использоваться на одном узле, но я думаю, что несколько узлов проще). Владелец узла может разрешить кому-либо публиковать на узле, так что это не проблема.

PEP был упомянут, но это неправильное решение, если вы хотите публиковать его пользователям, которых нет в вашем списке.

Pubsub также позволит вам определить любой тип контента, который требуется для сообщений, или вообще ничего, если простой акт передачи сообщений достаточно информативен.

+0

Действительно. Pubsub настолько общий, что все, что даже отдаленно описывает сценарий публикации-подписки, привязывает его как возможное использование для Pubsub. – Tim

+0

Это 100% не решение. Мы здесь не для того, чтобы продавать сторонние коммерческие услуги. –

+0

Какие коммерческие услуги вы говорите? Pubsub - это просто расширение протокола XMPP. Я даже не упомянул ни одно из многих доступных OSS или коммерческих решений. – Robin

1

PubSub будет работать, однако то, что вы описываете, больше похоже на MUC (Multi User Chat).

В основном, это создает комнату, что ваши посетители могут присоединиться к (может быть, не используя это словоблудие), а затем, хорошо, когда любых из них SENS сообщения в комнату чата, все они получают его. У вас может быть определенная конфигурация, где вы разрешаете отдельным пользователям публиковать.

Поскольку у вас уже есть клиент, работающий в браузере, с Strophe, это должно быть довольно легко. Просто убедитесь, что этот MUC компонент работает на вашем сервере.

+0

Спасибо за ответ. Я также попробовал MUC с strophe, и его работа просто прекрасна. Но в этом случае я хочу, чтобы система уведомлений, например, предположила, что есть модуль вопросов и ответов, и я задаю вопрос, если пользователь1 отвечает на это, тогда я получаю уведомление. Затем, если пользователь отвечает, и я, и пользователь получают уведомление. Самое главное, если я нахожусь в сети, когда отправлен ответ, я должен увидеть всплывающее окно без меня, нажимая на что-либо. Как отправить сообщение заголовка ко всем jids с помощью xmpp lib на стороне сервера, например xmpphp, и обработать сообщение на стороне клиента, используя strophe? – naiquevin

+0

, чтобы прояснить мой вопрос - я попытался отправить сообщение с помощью xmpphp в jid и получить его с помощью клиента strophe, и он работает. что я не уверен, будет ли этот метод давать какие-либо проблемы, если сообщение будет отправлено многим людям. – naiquevin

1

Что вы пытаетесь сделать с библиотекой xmpphp, то есть отправкой сообщения на несколько jid, когда это необходимо, является то, что может сделать для вас pub-sub или MUC. : D Следовательно, в зависимости от типа вашего приложения вам нужно выбрать один вариант и экспериментировать с xmpp, все должно стать ясным по мере того, как вы продолжаете ...

+0

Спасибо за ответ. Проблема в том, что я должен обрабатывать различные виды уведомлений. В некоторых случаях, pubsub, кажется, идеальное решение, но не для всех. Вот почему я думал о отправке уведомлений вручную в виде единого решения для всех. – naiquevin

+0

Это не самый предпочтительный способ, о котором я должен сказать, поскольку, поскольку ваша загрузка приложения начинает увеличиваться, этот подход не будет масштабироваться. Пусть сервер jabber сделает это вещание с вашей стороны, вы просто проинструктируете сервер jabber, что/когда/будет передано .... –

1

Чтобы ответить на ваш второй вопрос относительно уведомления в реальном времени, вам нужно использовать PEP вместо pubsub. Основное различие между 2 заключается в том, что PEP будет публиковаться только тем, кто входит в ваш список, и я думаю, что вы хотите. Кроме того, я думаю, что PEP более широко поддерживается, чем pubsub или atleast поддерживает jabber.org. Единственная проблема с PEP заключается в том, что для этого требуется поддержка Entity Capability.

Об этом сообщается в блоге here. Примеры приведены на Java; надеюсь, что вы не против этого ;-)

+0

Спасибо за ответ, проверит PEP. Согласно моему требованию, уведомление должно быть опубликовано любому, кто может или не может быть в моем списке. Предположим, что мы рассматриваем эту конкретную нить, и если оба абхинава и чук-ли находятся в моем списке, но они не находятся в реестре друг друга, несмотря на это, когда ответы chuk lee, уведомление должно идти в abhinav, потому что он ответил раньше. Также текст, который идет к абхинаву и мне (автор вопроса), должен быть другим. – naiquevin

+0

Затем я предлагаю вам использовать подход MUC, используя чат в качестве узла pubsub. Но переносите данные в отдельном пространстве имен в . Таким образом, ваши данные не будут отображаться в чате. Как я уже сказал, мне еще предстоит найти общедоступный сервер, поддерживающий pubsub. –

+0

Что вы предлагаете - это эффективно взломать MUC, чтобы вы могли использовать его как pubsub. Зачем беспокоиться, когда вы можете просто использовать pubsub? – Robin

Смежные вопросы