Để duy trì đối tượng, tôi đã thêm Redissupport bằng cách sử dụng node_redis. Sau đó, Ireplac đặt vòng lặp client.send trên loạt kênh với Redis pub / subas một lớp trừu tượng. Nhưng tôi nhận thấy rằng tôi cần tạo một ứng dụng khách newRedis cho mỗi người dùng đã đăng ký. Và tôi vẫn cần lưu trữ thông tin khách hàng socket.io để gửi tin nhắn khi xuất bản. Làm thế nào có thể được đó là? Có cách triển khai hoặc phát triển thêm nào khác (tốt hơn) mà tôi có thể thực hiện không? Bạn sẽ làm gì?
Có, bạn phải tạo một ứng dụng khách redis mới cho mọi yêu cầu io. Nó nặng và không thể mở rộng. Nhưng việc tạo một kết nối máy khách redis mới không tốn nhiều bộ nhớ. Vì vậy, nếu số lượng người dùng hệ thống của bạn không quá 5000 thì vẫn ổn. Để mở rộng quy mô, bạn có thể thêm máy chủ redis nô lệ để giải quyết vấn đề đăng ký và xuất bản nặng và nếu bạn lo lắng về việc tạo nhiều kết nối thì bạn có thể tăng uLIMIT hệ điều hành của mình.
Bạn không cần phải lưu trữ ứng dụng khách socket.io trong tin nhắn đã gửi. Khi redis nhận được tin nhắn kênh đã đăng ký. Nó sẽ gửi tin nhắn đến một ứng dụng khách io cụ thể.
subscribe.on("message",function(channel,message) {
var msg = { message: [client.sessionId, message] };
buffer.push(msg);
if (buffer.length 15) buffer.shift();
client.send(msg); > });
Để đăng ký nhiều kênh. Tôi khuyên bạn nên lưu trữ trước tất cả người dùng có nhiều hơn một kênh (Bạn có thể sử dụng Mongodb lưu trữ hoặc redis).
var store = redis.createClient();
var subscriber= redis.createClient()
store.hgetall(UID, function(e, obj){
subscriber.subscribe(obj.ChannelArray.toArray());
})