我想检索服务器端连接在一个房间中的所有套接字。
我发现方法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的多实例/节点
答案 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);它为您提供了房间中所有已连接的插座。