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

как да получите достъп до сесия на сокет във всички клъстери

Socket.io-redis следи в известен смисъл...

От техните документи

„Адаптерът Redis разширява функцията за излъчване на адаптера в паметта:пакетът също се публикува в Redis канал (вижте по-долу за формата на името на канала).

Всеки Socket.IO сървър получава този пакет и го излъчва към свой собствен списък от свързани гнезда."

Така че по принцип, redis се използва като посредник, за да каже на всеки сокет сървър да излъчва въз основа на X канал и т.н. Позволява ви да имате socket.io сървър в режим на клъстер, но както споменахте, може да падне, когато трябва да поддържате проследяване на неща извън просто излъчване.

И така, къде ни оставя това.. Е, можете да използвате персонализирани куки чрез socket.io-redis, но лично аз открих, че е наистина трудно за разбиране и използване и имах ограничен успех лично. Мисля, че с новата версия на socket.io и socket.io redis имаше някои настройки, за да опростя това, но не съм ги пробвал.

Вместо това, това, което правим, е да използваме redis hset и jget за съхраняване на сокета и идентификатора на потребители, след което, когато искаме да вкараме всички потребители онлайн, можем да запитаме redis, за да получим списъка с онлайн потребители или потребители в конкретна стая и т.н.

Това, което ще искате да направите, е да добавите пакета redis и да се свържете в допълнение към обикновения pub/sub.

След това, когато потребител се присъедини към стая или вашия сървър, вие ще направите hset. При първото присъединяване нашето изглежда така

redis.hset([collection-name],[Field],[value])

Така че в код изглежда така

redis.hset(decoded.cID,"socket-" + socket.id,socket.nickname)

Това ще зададе стойност в redis, така че името на колекцията е стойност (за нас това е уникален идентификатор на канала), след което съхраняваме 'socket.id' за полето заедно с 'nick-name' за стойността. Тази стойност е идентификационният номер на потребителя ИЛИ е анонимен, ако не са влезли

След това, когато искаме да вземем кой е в стаята, използваме командата hget

redis.HGETALL([collection-name],function(err,results){}

Така че вътре в, да речем, emit, ние извикваме командата redis.HGETALL, за да получим всички елементи в конкретна колекция, която предаваме и да ги изпратим обратно на всички свързани потребители.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Spring Data RedisTemplate:сериализиране на стойността и хеш стойността

  2. Функция на клавишите Redis за съвпадение с множество шаблони

  3. Списъци на Redis

  4. Как мога да намеря идентификатора на сесията, когато използвам express/connect и хранилище на сесия?

  5. Грешка 99 при свързване с локален хост:6379. Не може да се присвои исканият адрес