Пример использования socket.io-redis

Привет всем и спасибо за ваше время и вашу помощь.

Мне нужен простой пример использования socket.io-redis, пожалуйста, с комментариями. Документацию читал, но не понял. Спасибо,


person Rifton007    schedule 09.07.2016    source источник


Ответы (1)


В документации socket.io-redis не упоминается, что вам действительно нужно запустить сервер Redis, поэтому вы могли об этом забыть. Плагин socket.io-redis использует клиент pub/sub сервера redis для подключения нескольких экземпляров socket.io.

  1. загрузите и установите сервер Redis с https://redis.io

  2. добавьте плагин redis в свои экземпляры socket.io:

    var express = require('express');
    var app = express();
    var server = require('http').Server(app);
    var io = require('socket.io')(server);
    var redis = require('socket.io-redis');
    io.adapter(redis({ host: 'localhost', port: 6379 }));
    

    6379 — это порт redis по умолчанию, localhost, если вы запускаете node и redis на одном сервере.

  3. добавьте функции socket.io и socket.io-redis, которые вам нужны

    var your_namespace_socket = io.of('/your-namespace');
    your_namespace_socket.on('connection', function(socket){
    
      socket.on('join', function(room){
        socket.join(room);
    
        //log other socket.io-id's in the room
        your_namespace_socket.adapter.clients([room], (err, clients) => {
          console.log(clients);
        });
      });
    });
    
  4. Запустите сервер с помощью socket.io

    server.listen(3000, function(){
       logger.debug('listening on *:3000');
    });
    
person Dries Cleymans    schedule 03.08.2017
comment
Если я запустил несколько серверов socketjs на другом компьютере, позволит ли этот адаптер мне присоединиться к выбранным пользователям с разных серверов в одной комнате? - person Aedric; 04.12.2019
comment
@ Эдрик, да, будет! Сама комната сохраняется в Redis, поэтому, когда вы запрашиваете пользователей, вы на самом деле запрашиваете ее не с сервера (в памяти), а из Redis (сохраняется на разных серверах). На странице пакета GitHub — Адаптер для включения трансляции событий на несколько отдельных узлов сервера socket.io. - person kano; 27.03.2020
comment
Большое спасибо. Почему никто не говорит, что нам нужен сервер Redis? На самом деле есть много людей, которые только начинают, которые никогда не слышали о Redis, которые действительно не могут понять эту необходимость. Еще раз большое спасибо - person Leonardo Rick; 01.03.2021
comment
@kano Со страницы Github. Примечание: данные не хранятся в самом Redis. Сервер Redis действует только как pub/sub сервер. Каждое отправленное сообщение публикуется в Redis, который также транслируется на другие серверы сокетов. - person zahlen; 01.03.2021