Базові даніРеальний час

Чат і сповіщення в реальному часі

Розсилайте повідомлення кожному підключеному клієнту в реальному часі, із шардованими каналами для кластерів і потоками для історії.

публікація, кожному підписнику
1
канали для кластерів
Шардовані
з потоками
+історія
Крок 1 з 5
Сервери підписуються

Кожен сервер WebSocket підписується на кімнати, у яких перебувають його підключені користувачі.

Приклад сесіїplaying
# Сервери підписуються
hotkv> SUBSCRIBE room:42
1) "subscribe"
2) "room:42"
3) (integer) 1

Анімований покроковий розбір з реальними командами HotKV і прикладами відповідей. Натисніть будь-який крок, щоб перейти до нього. Команди та відповіді залишаються англійською, так само, як ви вводите й бачите їх у HotKV.

Проблема

Кімната чату чи жива стрічка сповіщень має досягати кожного підключеного користувача одночасно, через багато серверів WebSocket. Опитування бази даних надто повільне й дороге, а серверам потрібен спільний спосіб повідомляти одне одному, що щось сталося.

Як це вирішує HotKV

Кожен сервер WebSocket підписується на канали, що цікавлять його користувачів. Коли щось відбувається, один PUBLISH досягає кожного підписаного сервера, який пересилає його своїм користувачам. Шардовані канали тримають трафік на вузлі, що володіє каналом у кластері, а потік біля кожної кімнати зберігає історію для користувачів, які приєднуються пізніше.

Крок за кроком

Що відбувається, команда за командою

  1. 01

    Сервери підписуються

    Кожен сервер WebSocket підписується на кімнати, у яких перебувають його підключені користувачі.

    SUBSCRIBE room:42
  2. 02

    Alice надсилає повідомлення

    Її сервер публікує один раз. У відповіді вказано, скільки підписників його отримали.

    PUBLISH room:42 "{\"from\":\"alice\",\"text\":\"Deploy is green\"}"
  3. 03

    Збережіть історію

    Повідомлення також додається до потоку кімнати, обмеженого останніми 1000 повідомлень.

    XADD room:42:history MAXLEN ~ 1000 * from alice text "Deploy is green"
  4. 04

    Bob перепідключається пізніше

    Він читає останні 50 повідомлень із потоку, потім переходить до живого каналу.

    XREVRANGE room:42:history + - COUNT 50
  5. 05

    Шардовані канали в кластері

    У режимі кластера SPUBLISH тримає повідомлення на вузлі, що володіє каналом.

    SPUBLISH room:{42}:typing "alice"
Де це доречно

Реальні сценарії

Командний чат і чат підтримки

Повідомлення розходяться до кожного сервера, що тримає з'єднання учасника, а потік дає новачкам попередню історію.

Живі сповіщення

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

Спільні застосунки

Позиції курсорів та індикатори набору розсилаються на короткоживучих каналах.

Вбудовано

Що ви отримуєте

Розсилка

Одна публікація досягає кожного підписника.

PUBLISHSUBSCRIBE

Підписки за шаблоном

Підпишіться на room:*, щоб отримувати кожну кімнату.

PSUBSCRIBE

Шардований pub/sub

Канали лишаються на вузлі, що ними володіє, у кластері.

SPUBLISHSSUBSCRIBE

Історія

Поєднайте канал з обмеженим потоком для повідомлень, які користувачі пропустили.

XADDXREVRANGE

Поширені запитання

Чи зберігаються повідомлення pub/sub?

Ні. Pub/sub доставляє тим, хто підписаний у цей момент. Використовуйте потік біля каналу, якщо користувачам потрібна історія.

Чи працює це в кластері?

Так. Використовуйте шардований pub/sub (SPUBLISH, SSUBSCRIBE), щоб трафік кожного каналу лишався на вузлі, що ним володіє.

Чи можна отримувати сповіщення про зміну ключів?

Так. Сповіщення простору ключів публікують події про зміни ключів. Дивіться документацію щодо сповіщень простору ключів.

Пов'язані сценарії використання

Спробуйте на власному навантаженні

HotKV розмовляє протоколом Redis, тож ви можете направити на нього наявний клієнт і виконувати ті самі команди.