使用socket.io-redis的socket.io:将所有套接字对象放在一个房间中

时间:2019-11-21 14:59:20

标签: javascript node.js websocket socket.io socket.io-redis

我想检索服务器端连接在一个房间中的所有套接字。

我发现方法clients如果在方法in之后链接,则会返回房间中连接的所有套接字:

import * as express from 'express';
import * as SocketIO from 'socket.io';
import * as redisSocket from 'socket.io-redis';
import * as sharedsession from 'express-socket.io-session';

const app = express();

const redisOption = {port: 6379, host: 'XXX'};

// use the RedisStore as express session
const session = session({
  name: 'SESSIONID',
  store: new RedisStore(redisOption),
  secret: 'Ashg8hV77bxFeyLVec',
  resave: false,
  saveUninitialized: false
});
app.use(session);

// start express server
const httpServer = app.listen(80);

// attach the express app to socket.io server
const socketServer = SocketIO(httpServer, { path: '/api/socket.io', origins: '*:*' });

// set redis as socket adpter for multi instance/nodes
socketServer.adapter(redisSocket(redisOption));

// share the express session with socket.io
socketServer.use(sharedsession(session, {autoSave: true}));

// get all client in a room
socketServer.in(room_id).clients((err, clients) => {
    for (let i = 0, e = clients.length; i < e; i++) {
        const client = clients[i];
        console.log(client); // print the socket id

        // HOW RETRIVE THE SOCKET OBJECT???
    }
});

但是我需要检索所有套接字会话/握手。

有一种方法可以检索所有套接字会话/握手吗?

侧面注意:套接字服务器是具有socket.io-redis的多实例/节点

  • socket.io:2.3.0
  • socket.io-redis:5.2.0

2 个答案:

答案 0 :(得分:1)

我不确定下面的代码是否可以工作,但是我认为通过使用socket.io-redis提供的customHook,我们可以获得基于Redis的多节点的socket.handshake.session。

希望下面的代码有帮助。

ng build --prod --aot --vendor-chunk --common-chunk --delete-output-path --buildOptimizer

答案 1 :(得分:-3)

Object.keys(io.sockets.sockets);它为您提供了房间中所有已连接的插座。

相关问题