Socket.io使用MemoryStore的默認,因此所有連接的客戶端將被存儲在內存中,根本不可能(當然,不是安靜,但後來更多)發送和從連接到不同的插座客戶接收事件.io服務器。
讓所有socket.io服務器接收所有事件的一種方法是所有服務器都使用redis的pub-sub。因此,使用socket.emit可以發佈到redis。
redis_client = require('redis').createClient();
redis_client.publish('channelName', data);
和所有的插槽服務器通過Redis的以及在接收到消息其發射到連接到他們的客戶端訂閱該頻道。
redis_sub = require('redis').createClient();
redis_sub.subscribe('channelName', 'moreChannels');
redis_sub.on("message", function (channel, message) {
socket.emit(channel, message);
});
複雜的東西!但等等,結果你實際上並不需要這種代碼來實現目標。插座。io擁有RedisStore,它基本上做了上面的代碼應該以更好的方式做的事情,以便您可以編寫Socket.io代碼,就像您爲單個服務器編寫代碼一樣,並且仍然會通過redis傳播到其他socket.io服務器。
總結socket.io通過使用redis作爲通道而不是內存來跨多個服務器發送消息。
完美,正是我所期待的! – hackerhasid