Socket.io sử dụng MemoryStore theo mặc định, vì vậy tất cả các máy khách được kết nối sẽ được lưu trữ trong bộ nhớ khiến cho việc gửi và nhận các sự kiện từ máy khách được kết nối với một máy chủ socket.io khác là không thể (tốt, không yên tĩnh mà còn hơn thế nữa). P>
Một cách để làm cho tất cả các máy chủ socket.io nhận được tất cả các sự kiện là tất cả các máy chủ sử dụng pub-sub của redis. Vì vậy, thay vào đó, sử dụng socket.emit, người ta có thể xuất bản lên redis.
redis_client = require('redis').createClient();
redis_client.publish('channelName', data);
Và tất cả các máy chủ socket đăng ký kênh đó thông qua redis và khi nhận được thông báo sẽ gửi nó đến các máy khách được kết nối với chúng.
redis_sub = require('redis').createClient();
redis_sub.subscribe('channelName', 'moreChannels');
redis_sub.on("message", function (channel, message) {
socket.emit(channel, message);
});
Nội dung phức tạp !! Nhưng chờ đã, hóa ra bạn không thực sự cần loại mã này để đạt được mục tiêu. Socket.io có RedisStore về cơ bản thực hiện những gì mã ở trên phải làm theo cách đẹp hơn để bạn có thể viết mã Socket.io như cách bạn viết cho một máy chủ duy nhất và sẽ vẫn được truyền sang máy chủ socket.io khác thông qua redis.
Để tóm tắt, socket.io sẽ gửi thông báo qua nhiều máy chủ bằng cách sử dụng redis làm kênh thay vì bộ nhớ.