- Аспекты имен для каналов и групп каналов
- Мультиплексирование каналов
- Примеры кода мультиплексирования канала
- Подписка, указав канал в виде массива
- Группы каналов
- Вопросы проектирования группы каналов
- Примеры кода группы каналов
- Определение группы каналов
- Добавление каналов в группу каналов
- Подписка на группу каналов
- Отказ от подписки на группу каналов
- Удаление канала из группы каналов
- Перечисление всех каналов в группе каналов
- Удаление групп каналов по имени
Когда включен через Консоль администратора PubNub функция потокового контроллера предоставляет разработчикам PubNub возможность эффективно подписываться на несколько каналов с помощью мультиплексирования каналов (MXing) и групп каналов.
Аспекты имен для каналов и групп каналов
Названия каналов и групп каналов совместимы с UTF-8. Длина имени ограничена 64, и запрещенные символы в группе каналов:
- запятая:,
- косая черта: /
- обратная косая черта: \
- период:
- звездочки: *
- двоеточие: :
Мультиплексирование каналов
Мультиплексирование каналов позволяет разработчикам подписаться на до 50 каналов (не входящих в группу каналов) через один сокет TCP. На мобильных устройствах легко реализовать пропускную способность сети и экономию энергии аккумулятора, полученную благодаря мультиплексированию каналов.
Примеры кода мультиплексирования канала
Приведенные ниже примеры демонстрируют, как подписаться и отписаться от нескольких каналов одним вызовом. Использование обратных вызовов даст вам возможность узнать, когда ваши операции завершатся успешно или с ошибками.
Подписка, указав канал в виде массива
pubnub.subscribe () .channels (Arrays.asList ("my_channel1", "my_channel2")) // подписаться на каналы информации .execute (); pubnub.unsubscribe () .channels (Arrays.asList ("ch1", "ch2", "ch3")) .channelGroups (Arrays.asList ("cg1", "cg2", "cg3")) .execute ();
Подстановочные знаки позволяют клиенту подписываться на несколько каналов, используя подстановочные знаки. Например, если вы подпишетесь на a. *, Вы получите все сообщения для ab, ac, ax. Часть с подстановочными символами * относится к любой части имени строки канала после точки (.).
Поддерживается 3 уровня (2 точки) подстановочных знаков, например:
а. *
аб *
pubnub.subscribe () .channels (Arrays.asList ("foo. *")) // подписаться на информацию о каналах .execute ();
Группы каналов
Группы каналов позволяют разработчикам PubNub объединять тысячи каналов в группы, которые можно идентифицировать по имени. Затем на эти группы каналов можно подписаться, получая данные из множества внутренних каналов, которые содержит группа каналов.
Вопросы проектирования группы каналов
При создании с группами каналов вы можете создавать неограниченное количество этих групп каналов с уникальным именем, в каждой из которых может быть до 2000 каналов. На один экземпляр PubNub можно подписаться до 10 групп каналов. На приведенной ниже диаграмме изображен этот шаблон проектирования и ограничения по умолчанию:
Например, для приложения группового чата имя группы каналов будет описывать разговор, а имена каналов будут каналами аудитории чата.
Для пользователя rajat: семья, друзья и работа - это имена комнат чата (группы каналов), а каналы - контакты (каналы), ваш дизайн может выглядеть примерно так:
- раджат: семья: жена
- раджат: семья: дочь
- раджат: семья: сын
- раджат: друзья: панду
- раджат: друзья: крейг
- Раджат: друзья: Стивен
- раджат: работа: панду
- раджат: работа: Стивен
- раджат: работа: сергей
Учитывая вышеприведенный шаблон семейства, друзья и работа - это 3 группы каналов, каждая из которых содержит несколько каналов в различных комбинациях, таких как жена, сын, панду, Крейг, Стивен и т. Д.
Аналогично для пользователя alex: mychats - это имя комнаты чата (группа каналов) и общие сообщения о каналах, общее присутствие клавиатуры, общие j-сообщения, общее присутствие j-клавиатуры, общее-m- сообщения и general-m-клавиатура-присутствие, ваш дизайн может выглядеть примерно так:
- alex: mychats: общие сообщения
- alex: mychats: общее присутствие клавиатуры
- alex: mychats: general-j-messages
- alex: mychats: general-j-клавиатура-присутствие
- alex: mychats: general-m-messages
- alex: mychats: general-m-клавиатура-присутствие
Пожалуйста, свяжитесь с [email protected] если вы чувствуете, что этот шаблон проектирования и / или ограничения по умолчанию не будут соответствовать дизайну вашего приложения.
Каждая группа каналов и связанный канал (ы) идентифицируется уникальным именем. Эти имена могут содержать до 64 символов Unicode, за исключением зарезервированных символов:,,:,. , /, *, непечатаемые управляющие символы ASCII и ноль Юникода.
Примеры кода группы каналов
Прежде чем использовать группу каналов, необходимо сначала добавить в нее канал. Каналы могут быть добавлены либо со стороны клиента (мобильный телефон, веб-страница), либо со стороны сервера (Java, Ruby, Python).
Для нашего примера, давайте создадим приложение чата вокруг групп каналов. Каждая группа каналов будет содержать тематические каналы участников группы. Следующие шаги продемонстрируют:
- Определение группы каналов
- Добавление каналов в группу каналов
- Подписка на группу каналов
- Отказ от подписки на группу каналов
- Получение сообщений о присутствии группы каналов
- Удаление каналов из группы каналов
- Перечисление всех каналов в группе каналов
- Удаление канала из группы каналов
Определение группы каналов
Мы неявно определим группу каналов под названием family.
pubnub.listChannelsForChannelGroup () .channelGroup ("family") .async (новый PNCallback <PNChannelGroupsAllChannelsResult> () {@Override public void onResponse (PNChannelGroupsAllChannelsResult result, состояние PNStatus) {})
Добавление каналов в группу каналов
Мы добавим жену канала в семейство каналов.
pubnub.addChannelsToChannelGroup () .channelGroup (channelGroup) .channels (Arrays.asList ("ouse ")) .async (новый PNCallback <PNChannelGroupsAddChannelResult> () {@Override общедоступная пустота onResponse (PNChannel }atult) PNShannelGroup ()
Продолжая создавать CG, мы добавляем дочерние и дочерние каналы в эту группу каналов.
pubnub.addChannelsToChannelGroup () .channelGroup (channelGroup) .channels (Arrays.asList ("son", "daughter")) .async (новый PNCallback <PNChannelGroupsAddChannelResult> () {@Override public void onResponseRatNatNatNatNatRatNatRatNatRatNatRNR = }});
Подписка на группу каналов
Теперь, когда мы добавили несколько каналов в нашу CG, нам нужно подписаться на нее. Когда поступает сообщение, опубликованное для любого из членов группы каналов, оно поступит через переменную m в обратном вызове сообщения. Переменная c будет содержать имя исходного канала.
pubnub.subscribe () .channelGroups (Arrays.asList (channelGroup)) // подписаться на группы каналов .withTimetoken (1337L) // необязательно, передать отметку времени .withPresence () // также подписаться на связанную информацию о присутствии .execute ();
Отказ от подписки на группу каналов
Чтобы прекратить прием сообщений в группе каналов, необходимо отписаться от группы:
pubnub.unsubscribe () .channelGroups (Arrays.asList (channelGroup)) .execute ();
Чтобы включить получение сообщений о присутствии для CG, просто вызовите метод subscribe () с помощью withPresence ():
pubnub.subscribe () .channelGroups (Arrays.asList ("cg1", "cg2")) // подписаться на группы каналов .withTimetoken (1337L) // необязательно, передать отметку времени .withPresence () // также подписаться на соответствующее присутствие информация .execute ();
Мы узнаем больше об использовании функций PubNub Presence в Присутствие руководство.
Удаление канала из группы каналов
Предположим, что наш сын больше не хочет участвовать в семейном приложении чата, потому что его раздражают комментарии его сестры. Чтобы удалить его канал из группы, мы бы просто вызвали следующий метод:
pubnub.removeChannelsFromChannelGroup () .channelGroup ("family") .channels (Arrays.asList ("son")) .async (новый PNCallback <PNChannelGroupsRemoveChannelResult> () {@Override общедоступный void onResponse {resultCube }RR). );
Если бы у него были разрешения на удаление своей сестры из группы, он, вероятно, просто сделал бы это вместо этого, но если бы PAM был реализован, мы могли бы сделать так, чтобы у него были только разрешения либо добавлять, либо удалять себя в группу, но не добавлять или удалять другие. Мы обсудим PAM более подробно в PAM, SSL и AES256 Шифрование сообщений руководство.
Перечисление всех каналов в группе каналов
Чтобы получить список всех каналов, определенных в группе каналов, вызовите следующий метод. В этом примере мы сбрасываем все каналы в rajat: family:
pubnub.listChannelsForChannelGroup () .channelGroup ("family") .async (новый PNCallback <PNChannelGroupsAllChannelsResult> () {@Override public void onResponse (PNChannelGroupsAllChannelsResult result, состояние PNStatus) {})
Удаление групп каналов по имени
Чтобы удалить группу каналов по имени, используйте следующий метод:
pubnub.deleteChannelGroup () .channelGroup ("family") .async (новый PNCallback <PNChannelGroupsDeleteGroupResult> () {@Override public void onResponse (результат PNChannelGroupsDeleteGroupResult, статус PNStatus) {}});