第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

socket.io 和 socket.io-redis:獲取房間中的所有套接字對象

socket.io 和 socket.io-redis:獲取房間中的所有套接字對象

有只小跳蛙 2022-01-07 13:25:27
我想檢索一個房間中連接的服務器端所有套接字。我發(fā)現(xiàn)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 sessionconst session = session({  name: 'SESSIONID',  store: new RedisStore(redisOption),  secret: 'Ashg8hV77bxFeyLVec',  resave: false,  saveUninitialized: false});app.use(session);// start express serverconst httpServer = app.listen(80);// attach the express app to socket.io serverconst socketServer = SocketIO(httpServer, { path: '/api/socket.io', origins: '*:*' });// set redis as socket adpter for multi instance/nodessocketServer.adapter(redisSocket(redisOption));// share the express session with socket.iosocketServer.use(sharedsession(session, {autoSave: true}));// get all client in a roomsocketServer.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 的多實例/節(jié)點套接字.io:2.3.0socket.io-redis: 5.2.0
查看完整描述

2 回答

?
蝴蝶不菲

TA貢獻1810條經(jīng)驗 獲得超4個贊

我不確定下面的代碼是否有效,但我認為通過使用 socket.io-redis 提供的 customHook,我們可以獲得基于 redis 的多節(jié)點的 socket.handshake.session。


我希望下面的代碼有所幫助。


// 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???

    }

});


// set root namespace

const rootNamespace = socketServer.of('/');


// define customHook

rootNamespace.adapter.customHook = (request, cb) => {

    // every socket.io server execute below, when customRequest requested

    const type = request.type;

    if(type === 'getHandShakeSession'){

        // get all socket objects on local socket.io server

        const sockets = rootNamespace.connected;

        const socketIDs = Object.keys(sockets);

        // get all socket.handshak.session array on local socket.io server

        const sessions = socketIDs.map(socketID => sockets[socketID].handshake.session);

        cb(sessions)

    }

    cb()

}


// request customRequest

rootNamespace.adapter.customRequest({type:'getHandShakeSession'},(err,replies) => {

    //replies are array which element was pushed by cb(element) on individual socket.io server

    //remove empty reply 

    const filtered = replies.filter(reply => reply !== undefined)

    // filtered seems like [[session1,session2,...],[sesssion3,session4,...],..]

    console.log(filtered)

} )


查看完整回答
反對 回復 2022-01-07
?
當年話下

TA貢獻1890條經(jīng)驗 獲得超9個贊

Object.keys(io.sockets.sockets); 它為您提供房間內(nèi)所有已連接的插座。


查看完整回答
反對 回復 2022-01-07
  • 2 回答
  • 0 關注
  • 478 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號