Вопрос по – Лучшая практика PubNub: Как управлять частными комнатами?

2

Я изучаю pubnub и читаю их документацию, но просто не могу найти, как управлять чатом с несколькими комнатами.

По умолчанию канал может прослушивать любой. Подписаться на него и опубликовать его легко.

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

Эти динамические комнаты будут с вкладками, и пользователь должен иметь возможность переходить от одного к другому.

Другим требованием может быть то, что личный разговор с кем-либо не выгоняет вас из других комнат, на которые вы подписаны (вы все равно можете быть уведомлены о том, что новое сообщение было опубликовано в другой комнате во время чата)

Какова будет лучшая практика для достижения этой цели?

Would I use different channels (created dynamically)? Would I use one channel and filter the messages according to their status, pseudo-room id or protagonists? Would I use multiplexing (one socket only)?

Мне нужно знать наилучший способ для достижения этой цели, поскольку в документации описываются только основные сценарии с одной комнатой, и в Интернете об этом ничего не говорится.

Спасибо.

PS: я знаю, что PubNub не рекомендует более 2 каналов одновременно (хотя мне трудно найти объяснение этому).

PPS: я использую punbub с socket.io

Ваш Ответ

3   ответа
6

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

Это работает с помощью токенов доступа (также называемых «ключом авторизации»). Разработчик (вы) создает ключ авторизации (в основном, любую строку символов) и передает его в PubNub Access Manager. Затем вы устанавливаете правила для этого Ключа аутентификации (то есть, какие каналы Ключ аутентификации может публиковать и / или подписывать).

Этот ключ авторизации предоставляется любому устройству, которому необходим доступ к каналу, и используется, когда устройство подписывается или публикуется на канале.

Основные документы доступны здесь:http://www.pubnub.com/docs/javascript/tutorial/access-manager.html

Предоставьте 60-минутную привилегию чтения / записи для канала & quot; privateChat & quot; к auth_key:

 pubnub.grant({
 channel  : 'privateChat',
 auth_key : 'abxyz12-auth-key-987tuv',
 read     : true,
 write    : true,
 ttl      : 60
 });
0

я не уверен, что это я просто взломал, но для создания многоканальных соединений с текущей библиотекой socket-io необходимо установить io.connected = false; перед передачей в другой объект конфигурации канала.

Например:

var pubnub_setup = {
  channel       : 'public_channel',
  publish_key   : 'demo',
  subscribe_key : 'demo'
};

var private_setup = {
  channel       : 'private_channel',
  publish_key   : 'demo',
  subscribe_key : 'demo'
};

// Make your public socket connections
var publicSocket = io.connect( 'http://pubsub.pubnub.com/pub_socket', pubnub_setup );
var anotherPublicSocket = io.connect( 'http://pubsub.pubnub.com/another_pub_socket', pubnub_setup);

// Set false otherwise you keep getting back the previous created socket which is
// bound to the original channel 'public_channel'
io.connected = false;
var secretSocket = io.connect( 'http://pubsub.pubnub.com/secret_mulitplex_socket_namespace', private_setup );

Теперь вы можете продолжать создавать новые секретные сокеты на частном канале.

10
Socket.IO and PubNub Managing Private Rooms for Chat Services

вероятно, похожий на IRC-клиенты, где вы можете присоединиться и сидеть в нескольких комнатах чата (например, на freenode.net). Это возможно и потребует некоторых специальных заданий, чтобы сделать это правильно с вашей стороны.

Вы начнете с открытияTwo Channelsодин для основного чата и один для вашего частного "ME" боковые чаты. С этой стороны Private & quot; ME & quot; канал, вам нужно будет создать длинное и непредсказуемое имя канала в стиле идентификатора сеанса, которое обычно выглядит так:

YTQyOGFiNWEtNTZmZC00OGVhLTgxZjktMWE3ZmMyMzc3MTRhCg==

Это похоже на ссылочный идентификатор для пользователя. Этот идентификатор можно использовать для приватных чатов 1-на-1, а другую комнату можно использовать дляGroup Chat, Вы защитите этот групповой чат, используя Access Control Management, который мы называемPubNub Access Manager (РАМ).

Для получения дополнительной информации о безопасности вам необходимо ознакомиться с нашими рекомендациями по безопасности, доступными здесьPubNub Поддержка безопасности в нашей справочной службе и базе знаний.

Теперь, когда у нас установлены частные каналы, безопасная связь станет возможной благодаря отправке и получению чатов через ваш частный сервер (тот, который может предоставлять полномочия), позволяющий ретранслировать сообщения для каждого пользователя. Вы можете узнать, как это сделать, прочитав этот разделОтправка событий с сервера на клиент Socket IO Документация на PubNub.

Второй канал будет для публичного чата для всех комнат. Для поддержки нескольких вкладок вы просто будете использовать функцию мультиплексирования каналов Socket IO на PubNub, добавляя новые комнаты с помощью метода io.connect (). Каждый раз, когда вы открываете новую вкладку, вы открываете новое пространство имен через io.connect (), которое вы можете использовать неограниченно. Тем не менее, обратите внимание, что вы должны подключаться не более чем к 2 каналам PubNub одновременно (что вы уже отметили в своем вопросе).

Вот способ ввода-вывода PubNub Socket для подписки на несколько каналов и категорий:

Socket.IO Documentation

https://github.com/pubnub/pubnub-api/tree/493d7fc97fb683379fc78be3ca7ad9bc97eb4200/socket.io#restricting-yourself-to-a-namespace

Socket.IO Video on Vimeo

http://vimeo.com/34496366

Example Socket.IO Multiplexing Code

https://github.com/pubnub/pubnub-api/tree/493d7fc97fb683379fc78be3ca7ad9bc97eb4200/socket.io/multiplexing

В качестве быстрого заключения вы будете использовать безопасные методы для установки частного «ME». канал для отправки / получения сообщений для каждого пользователя. И общедоступный "Чат" канал, который выталкивает все данные общедоступного чата. Мультиплексирование будет важно для публичного чата.

Привет Дунк, спасибо за подробности. Я обновлю это в ближайшее время.
Извините, но есть некоторые неработающие ссылки на ваш API.
Хорошо, все обновлено с новыми ссылками и ссылками.
@Pubnub. Стивен, сначала ты сутенер! Смотрел твои видео vimeo. Вы, ребята, должны сделать кучу больше. Я бы очень хотел увидеть настоящее чат-приложение, созданное с помощью pubnub. Как полный клон Оларка. Это был бы достаточно сложный проект, который мог бы включать мультиплексирование и дать нам реальное всестороннее представление о том, что можно построить. Не говоря уже о хорошей причине подписаться на pubnub. Кроме того, не могли бы вы добавить ASP (классические) примеры и, наконец, XMPP в pubnub, если это возможно. Я не знаю, если это возможно, но было бы плохо, если бы jabber-клиент подключался к pubnub.
Благодарю. Я польщен тем, что получил ответ от самого основателя PubNub! Я читаю эти ссылки, но, как новичок, я должен признать, что есть некоторые пробелы, с которыми я борюсь. Частные каналы легко получить в качестве концепции, но нет примера, показывающего, как реализовать их от А до Я. Это не претензия, так как я уверен, что это имеет смысл для любого образованного разработчика, но для меня это так. Это довольно тяжелое испытание. Я только что понял, что это не тот канал, который мне нужно объявить для связи с целевым пользователем, а 1-й аргумент & quot; socket.emit & quot; метод. Достаточно просто, но я нигде не читал. Baylock

Похожие вопросы