Data intiReal-time

Chat dan Notifikasi Real-Time

Sebarkan pesan ke setiap klien yang terhubung secara real-time, dengan channel ter-shard untuk klaster dan stream untuk riwayat.

publish, setiap subscriber
1
channel untuk klaster
Ter-shard
dengan stream
+riwayat
Langkah 1 dari 5
Server berlangganan

Setiap server WebSocket berlangganan ruang tempat penggunanya yang terhubung berada.

Sesi contohplaying
# Server berlangganan
hotkv> SUBSCRIBE room:42
1) "subscribe"
2) "room:42"
3) (integer) 1

Panduan beranimasi dengan perintah HotKV yang sebenarnya dan balasan contoh. Klik langkah mana pun untuk melompat ke sana. Perintah dan balasan tetap dalam bahasa Inggris, persis seperti yang Anda ketik dan lihat di HotKV.

Masalahnya

Ruang chat atau feed notifikasi langsung harus menjangkau setiap pengguna yang terhubung sekaligus, di banyak server WebSocket. Melakukan polling database terlalu lambat dan terlalu mahal, dan server memerlukan cara bersama untuk saling memberi tahu bahwa sesuatu terjadi.

Cara HotKV menanganinya

Setiap server WebSocket berlangganan channel yang diperhatikan penggunanya. Ketika sesuatu terjadi, satu PUBLISH menjangkau setiap server yang berlangganan, yang meneruskannya ke penggunanya. Channel ter-shard menjaga trafik di node yang memiliki channel dalam klaster, dan stream di samping setiap ruang menyimpan riwayat untuk pengguna yang bergabung kemudian.

Langkah demi langkah

Apa yang terjadi, perintah demi perintah

  1. 01

    Server berlangganan

    Setiap server WebSocket berlangganan ruang tempat penggunanya yang terhubung berada.

    SUBSCRIBE room:42
  2. 02

    Alice mengirim pesan

    Servernya menerbitkan sekali. Balasannya adalah berapa banyak subscriber yang menerimanya.

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

    Simpan riwayat

    Pesan juga ditambahkan ke stream ruang, dibatasi pada 1000 pesan terakhir.

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

    Bob terhubung kembali nanti

    Ia membaca 50 pesan terakhir dari stream, lalu tayang langsung di channel.

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

    Channel ter-shard dalam klaster

    Dalam mode klaster, SPUBLISH menjaga pesan di node yang memiliki channel.

    SPUBLISH room:{42}:typing "alice"
Di mana ini cocok

Skenario dunia nyata

Chat tim dan chat dukungan

Pesan menyebar ke setiap server yang memegang koneksi anggota, dan stream memberi pendatang baru riwayat sebelumnya.

Notifikasi langsung

Pembaruan pesanan, sebutan, dan peringatan didorong ke browser pada saat terjadi.

Aplikasi kolaboratif

Posisi kursor dan indikator mengetik disiarkan di channel berumur pendek.

Bawaan

Yang Anda dapatkan

Fan-out

Satu publish menjangkau setiap subscriber.

PUBLISHSUBSCRIBE

Langganan pola

Berlangganan room:* untuk menerima setiap ruang.

PSUBSCRIBE

Pub/sub ter-shard

Channel tetap berada di node yang memilikinya dalam klaster.

SPUBLISHSSUBSCRIBE

Riwayat

Pasangkan channel dengan stream terbatas untuk pesan yang terlewat pengguna.

XADDXREVRANGE

Pertanyaan umum

Apakah pesan pub/sub disimpan?

Tidak. Pub/sub mengirim kepada siapa pun yang berlangganan pada saat itu. Gunakan stream di samping channel jika pengguna memerlukan riwayat.

Apakah bekerja dalam klaster?

Ya. Gunakan pub/sub ter-shard (SPUBLISH, SSUBSCRIBE) agar trafik setiap channel tetap di node yang memilikinya.

Bisakah saya diberi tahu saat kunci berubah?

Ya. Notifikasi keyspace menerbitkan peristiwa untuk perubahan kunci. Lihat dokumentasi tentang notifikasi keyspace.

Kasus penggunaan terkait

Coba pada beban kerja Anda sendiri

HotKV berbicara protokol Redis, jadi Anda dapat mengarahkan klien yang sudah ada ke HotKV dan menjalankan perintah yang sama.