Укладка строк с сетями и nodejs

У меня проблемы с Redis, документация мне непонятна, и все мои попытки создать простой стек пошли наперекосяк.

Я использую nodejs как сервер и redis вместе с socket мне нужно составить список определенного типа пользователей отношение между ними и комнатами многие ко многим, вот так:

MEMBERS <-----> ROOMS

Несколько членов могут находиться в нескольких комнатах, а в нескольких комнатах может быть несколько членов.

Вся эта информация размещалась в памяти, приносила много лишнего веса, отсюда и идея использовать redis для управления этими типами соединений.

В моем коде я делаю это:

Запустите службу следующим образом:

const io = require ('socket.io'). listen (http);
const redisSocket = require ('socket.io-redis');
const redis = require ("redis");

Я получаю соединения в socket:

io.sockets.on ('connection', (socket) => {my _functions});

И я получаю socket.on участников, с которыми мне нужно работать

socket.on ('ioUpdateLocation', (data) => {
    // Send the location to the devices in the room
    io.sockets.to (data.room) .emit ('ioReceiveLocation', date);
    addRoom (data.room, socket.id);

    // Emits the location for line X destination Y
    io.sockets.to (data.room + data.destiny) .emit ('ioReceiveLocation', data);
    addRoom (data.room + data.destiny, socket.id);
});

И поэтому я планирую поставить эту розетку в комнате вот так:

const addRoom = (room, socketId) => {
    console.log ('room% s socket% s', room, socketId);

    redisClient.lpush (room, socketId, function (err, reply) {
        console.log ('err', err); // prints 2
        console.log ('reply', reply); // prints 2
    });
  }

Моя идея такова:

ROOMS | MEMBERS
123 | ['member01', 'member02', 'member03']
123A | ['member01']

Таким образом, используя redis, я надеюсь add и remove участников из комнаты и check, если этот участник находится в комнате, например, X.

БИЗНЕС-ПРАВИЛА

  1. MEMBER может находиться в нескольких комнатах
  2. В комнате не может быть 2 равных участников

С попытками было сделано:

1- client.set ();
2- client.hmset ();
3- client.rpush ();
4- client.sadd ();

Ни один успешно. Сначала замененное значение в примере выглядело бы так (те же значения были вставлены в следующем порядке member01, member02, member03):

ROOMS | MEMBERS
123 | 'member04'
123A | 'member01'

В попытках 2,3,4 результатом была ошибка:

{ReplyError: WRONGTYPE Операция с ключом, содержащим неверное значение в новой команде (/var/www/lb-api-geolocation/node_modules/redis/lib/command.js:12:22) в RedisClient.lpush (/var /www/lb-api-geolocation/node_modules/redis/lib/commands.js:58:47) в addRoom (/var/www/lb-api-geolocation/src/socket/connect.js:144:17) в Разъем. (/var/www/lb-api-geolocation/src/socket/connect.js:94:9) в emitOne (events.js: 115: 13) в Socket.emit (events.js: 210: 7) в / var/www/lb-api-geolocation/node_modules/socket.io/lib/socket.js:513:12 at _combinedTickCallback (внутренний/process/next_tick.js:131:7) at process._tickDomainCallback (внутренний/process/next_tick .js: 218: 9) команда: 'RPUSH', аргументы: ['59c54ace9e450c004ad4c90etripA', 'E4NXUZ417M2UwUxDAAAC'], код: 'WRONGTYPE'}

Как это решить?


person Renan Rodrigues    schedule 01.12.2017    source источник


Ответы (1)