Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

cách truy cập phiên socket trong tất cả các cụm

Socket.io-redis luôn theo dõi một cách hợp lý ..

Từ tài liệu của họ

"Bộ điều hợp Redis mở rộng chức năng phát sóng của bộ điều hợp trong bộ nhớ:gói tin cũng được xuất bản tới kênh Redis (xem bên dưới để biết định dạng của tên kênh).

Mỗi máy chủ Socket.IO nhận gói tin này và phát nó đến danh sách các ổ cắm được kết nối của riêng nó. "

Vì vậy, về cơ bản, redis được sử dụng làm môi giới để yêu cầu mỗi máy chủ socket phát ra dựa trên kênh X, v.v. Cho phép bạn có máy chủ socket.io ở chế độ cụm hoạt động, nhưng như bạn đã đề cập, nó có thể bị thiếu khi bạn cần giữ lại theo dõi những thứ bên ngoài chỉ của một bộ phát.

Vậy điều này để lại cho chúng ta ở đâu .. Vâng, bạn có thể sử dụng hook tùy chỉnh thông qua socket.io-redis nhưng cá nhân tôi thấy nó thực sự khó hiểu và khó sử dụng và có một số thành công hạn chế. Tôi nghĩ rằng với phiên bản mới của socket.io và socket.io đã có một số chỉnh sửa để làm cho việc này đơn giản hơn, tuy nhiên tôi chưa thử chúng.

Thay vào đó, những gì chúng tôi làm là sử dụng redis hset và jget để lưu trữ socket và ID của người dùng, sau đó khi chúng tôi muốn đưa tất cả người dùng trực tuyến, chúng tôi có thể truy vấn redis để lấy danh sách người dùng trực tuyến hoặc người dùng trong một phòng cụ thể, v.v.

Những gì bạn sẽ muốn làm là thêm gói redis và kết nối trong additon với pub / sub thông thường.

Sau đó, khi người dùng tham gia vào một phòng hoặc máy chủ của bạn cho vấn đề đó, bạn sẽ thực hiện một hset. Lần tham gia đầu tiên của chúng ta trông giống như thế này

redis.hset([collection-name],[Field],[value])

Vì vậy, trong mã nó giống như

redis.hset(decoded.cID,"socket-" + socket.id,socket.nickname)

Điều này sẽ đặt một giá trị trong redis, vì vậy tên bộ sưu tập là một giá trị (đối với chúng tôi là id duy nhất của kênh), sau đó chúng tôi lưu trữ 'socket.id' cho Trường cùng với 'nick-name' cho giá trị. Giá trị này là ID người dùng HOẶC ẩn danh nếu họ chưa đăng nhập

Sau đó, khi chúng ta muốn lấy ai đang ở trong phòng, chúng ta sử dụng lệnh hget

redis.HGETALL([collection-name],function(err,results){}

Vì vậy, bên trong giả sử phát ra, chúng tôi gọi lệnh redis.HGETALL để lấy tất cả các mục bên trong một bộ sưu tập cụ thể mà chúng tôi chuyển vào và gửi lại cho tất cả người dùng được kết nối.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis pub / sub cho máy chủ trò chuyện trong node.js

  2. Sử dụng Redis làm bộ đệm trung gian cho REST API

  3. Làm cách nào tôi có thể đọc từ Redis bên trong một khối MULTI trong Ruby?

  4. Cách thông báo cho Khách hàng biết vị trí chủ nhân của Redis mới đang sử dụng Sentinel

  5. Redis tcp-backlog