nhưng tôi không hiểu cách sử dụng RedisStore trong mã đó sẽ khác với việc sử dụng MemoryStore. Ai đó có thể giải thích cho tôi?
Sự khác biệt là khi sử dụng mặc định MemoryStore
, bất kỳ thư nào bạn phát ra trong một nhân viên sẽ chỉ được gửi cho khách hàng được kết nối với cùng một nhân viên vì không có IPC giữa người lao động. Sử dụng RedisStore
, tin nhắn của bạn sẽ được xuất bản tới một máy chủ redis mà tất cả các nhân viên của bạn đang đăng ký. Do đó, tin nhắn sẽ được tất cả công nhân và tất cả các khách hàng kết nối đón và phát sóng.
Ngoài ra sự khác nhau giữa cấu hình socket.io là gì để sử dụng redisstore so với tạo ứng dụng khách redis của riêng bạn và đặt/nhận dữ liệu của riêng bạn?
Tôi không quen thuộc với RedisStore
và vì vậy tôi không chắc chắn về tất cả sự khác biệt. Nhưng tự làm nó sẽ là một thực hành hoàn toàn hợp lệ. Trong trường hợp đó, bạn có thể xuất bản tất cả các tin nhắn đến một máy chủ redis, và lắng nghe những tin nhắn trong trình xử lý socket của bạn. Nó có thể sẽ làm việc nhiều hơn cho bạn, nhưng bạn cũng sẽ có quyền kiểm soát nhiều hơn về cách bạn muốn thiết lập nó. Tôi đã làm một điều gì đó tương tự như bản thân mình:
// Publishing a message somewhere
var pub = redis.createClient();
pub.publish("messages", JSON.stringify({type: "foo", content: "bar"}));
// Socket handler
io.sockets.on("connection", function(socket) {
var sub = redis.createClient();
sub.subscribe("messages");
sub.on("message", function(channel, message) {
socket.send(message);
});
socket.on("disconnect", function() {
sub.unsubscribe("messages");
sub.quit();
});
});
Điều này cũng có nghĩa là bạn phải tự quản lý thông điệp nâng cao hơn bằng cách xuất bản/đăng ký các kênh khác nhau. Với RedisStore
, bạn sẽ nhận được chức năng đó miễn phí bằng cách sử dụng các kênh socket.io (io.sockets.of("channel").emit(...)
).
Hạn chế tiềm năng lớn với điều này là các phiên socket.io không được chia sẻ giữa các nhân viên. Điều này có thể có nghĩa là các vấn đề nếu bạn sử dụng bất kỳ phương tiện vận chuyển bỏ phiếu dài nào.
Nguồn
2012-02-14 11:07:38
Đây là [một mã snip sử dụng RedisStore có nút] (http://www.ranu.com.ar/2011/11/redisstore-and-rooms-with-socketio.html) bạn có thể thấy thú vị; nó không nói sự khác biệt, mặc dù; Tôi đã trớ trêu thay, chỉ đọc về chủ đề này :) – Kato
Các liên kết cho những công việc không còn nữa =/ – qodeninja