Dữ liệu lõiThời gian thực

Chat và thông báo thời gian thực

Phát tán thông điệp tới mọi client đang kết nối theo thời gian thực, với kênh phân đoạn cho cụm và stream cho lịch sử.

lần phát hành, mọi người đăng ký
1
kênh cho cụm
Phân đoạn
với stream
+lịch sử
Bước 1 trên 5
Các máy chủ đăng ký

Mỗi máy chủ WebSocket đăng ký các phòng mà người dùng đang kết nối của nó tham gia.

Phiên ví dụplaying
# Các máy chủ đăng ký
hotkv> SUBSCRIBE room:42
1) "subscribe"
2) "room:42"
3) (integer) 1

Một hướng dẫn minh họa động với các lệnh HotKV thật và phản hồi ví dụ. Nhấn vào bất kỳ bước nào để nhảy tới đó. Lệnh và phản hồi giữ nguyên bằng tiếng Anh, đúng như bạn gõ và thấy trong HotKV.

Vấn đề

Một phòng chat hoặc nguồn thông báo trực tiếp phải đến được mọi người dùng đang kết nối cùng lúc, trên nhiều máy chủ WebSocket. Thăm dò cơ sở dữ liệu quá chậm và quá tốn kém, và các máy chủ cần một cách dùng chung để báo cho nhau rằng đã có chuyện xảy ra.

HotKV xử lý như thế nào

Mỗi máy chủ WebSocket đăng ký các kênh mà người dùng của nó quan tâm. Khi có bất cứ điều gì xảy ra, một PUBLISH đến mọi máy chủ đã đăng ký, và chúng chuyển tiếp tới người dùng của mình. Kênh phân đoạn giữ lưu lượng trên node sở hữu kênh trong một cụm, và một stream cạnh mỗi phòng giữ lịch sử cho người dùng tham gia sau.

Từng bước một

Điều gì xảy ra, từng lệnh một

  1. 01

    Các máy chủ đăng ký

    Mỗi máy chủ WebSocket đăng ký các phòng mà người dùng đang kết nối của nó tham gia.

    SUBSCRIBE room:42
  2. 02

    Alice gửi một tin nhắn

    Máy chủ của cô ấy phát hành một lần. Phản hồi là số người đăng ký đã nhận được.

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

    Giữ lịch sử

    Tin nhắn cũng được thêm vào stream của phòng, giới hạn ở 1000 tin nhắn cuối.

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

    Bob kết nối lại sau đó

    Anh ấy đọc 50 tin nhắn cuối từ stream, rồi chuyển sang trực tiếp trên kênh.

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

    Kênh phân đoạn trong một cụm

    Ở chế độ cụm, SPUBLISH giữ tin nhắn trên node sở hữu kênh.

    SPUBLISH room:{42}:typing "alice"
Phù hợp ở đâu

Các tình huống thực tế

Chat nhóm và chat hỗ trợ

Tin nhắn phát tán tới mọi máy chủ đang giữ kết nối của một thành viên, và stream cho người mới tham gia phần lịch sử cũ.

Thông báo trực tiếp

Cập nhật đơn hàng, lượt nhắc tên và cảnh báo được đẩy tới trình duyệt ngay khoảnh khắc chúng xảy ra.

Ứng dụng cộng tác

Vị trí con trỏ và chỉ báo đang gõ được phát trên các kênh tồn tại ngắn.

Tích hợp sẵn

Bạn nhận được gì

Phát tán

Một lần phát hành đến mọi người đăng ký.

PUBLISHSUBSCRIBE

Đăng ký theo mẫu

Đăng ký room:* để nhận mọi phòng.

PSUBSCRIBE

Pub/sub phân đoạn

Kênh ở lại trên node sở hữu chúng trong một cụm.

SPUBLISHSSUBSCRIBE

Lịch sử

Ghép một kênh với một stream bị giới hạn cho các tin nhắn người dùng đã bỏ lỡ.

XADDXREVRANGE

Câu hỏi thường gặp

Thông điệp pub/sub có được lưu không?

Không. Pub/sub chuyển tới bất kỳ ai đang đăng ký vào thời điểm đó. Hãy dùng một stream cạnh kênh nếu người dùng cần lịch sử.

Nó có hoạt động trong một cụm không?

Có. Dùng pub/sub phân đoạn (SPUBLISH, SSUBSCRIBE) để lưu lượng của mỗi kênh ở lại trên node sở hữu nó.

Tôi có thể được thông báo khi khóa thay đổi không?

Có. Thông báo không gian khóa phát hành sự kiện cho các thay đổi khóa. Xem tài liệu về thông báo không gian khóa.

Trường hợp sử dụng liên quan

Thử trên khối lượng công việc của chính bạn

HotKV nói giao thức Redis, nên bạn có thể trỏ một client hiện có tới nó và chạy chính những lệnh này.