Redis
 sql >> база данни >  >> NoSQL >> Redis

Как socket.io изпраща съобщения на множество сървъри?

Socket.io използва MemoryStore по подразбиране, така че всички свързани клиенти ще се съхраняват в паметта, което прави невъзможно (е, не тихо, но повече за това по-късно) за изпращане и получаване на събития от клиенти, свързани към различен сървър на socket.io.

Един от начините да накарате всички сървъри socket.io да получават всички събития е, че всички сървъри използват pub-sub на redis. Така че, вместо да използвате 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);
});

Сложни неща!! Но изчакайте, оказва се, че всъщност нямате нужда от този вид код, за да постигнете целта. Socket.io има RedisStore, който по същество прави това, което кодът по-горе трябва да прави по по-приятен начин, така че можете да пишете код на Socket.io, както бихте писали за един сървър и все пак ще се разпространява към друг сървър на socket.io чрез redis.

За да обобщим, socket.io изпраща съобщения на множество сървъри, като използва redis като канал вместо памет.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis :Как мога да сортирам хеша си по ключове?

  2. Как да изтриете ключове, съответстващи на шаблон в Redis Cluster

  3. Redis сентинел докер изображение / Dockerfile

  4. Многопараметричен търсач на съвпадения с Redis

  5. Django REST рамката все още отговаря с кеширани данни дори след като има празни ключове за redis