javascript - Express - socket.io - session 。将用户 ID 称为套接字 ID

标签 javascript node.js sockets session socket.io

我正在使用 express-socket.io-session .我想我能够通过查看教程来设置基本配置:

//BASIC CONFIG?

var clients = [];

var session = require("express-session")({
    secret: 'some key',
    resave: true,
    saveUninitialized: true
});
var sharedsession = require("express-socket.io-session");
app.use(session);

io.use(function(socket, next){
   next();
});

io.use(sharedsession(session, {
  autoSave:true
})); 

io.on('connection', function(socket) {

    console.log("CLIENT CONNECTED");
    var session = socket.handshake.session;
    clients.push(socket);

    socket.on('disconnect', function() {
       console.log("CLIENT DISCONNECTED");
    });

});

我现在想要做的是不是通过套接字而是通过应分配给该套接字的 session ID 来引用特定的客户端套接字。当用户登录时会发生这种情况:

req.session.user_id = user_id; 
//(user_id is equal to DB {0,1,2,3...} ids

当我这样做时,我能够将套接字发送到特定的客户端:

clients[0].emit("to_do",info); // I don't know who is client index 0 compared to the login reference...

我希望能够做到这一点或类似的事情:

user_id = 3; // which would have a socket assigned

clients(user_id).emit("to_do",info);

这意味着每个客户端都会有一个套接字分配给它之前分配的 id。我该怎么做才能通过该 ID 指定套接字?我对所有这些都没有经验,对于任何重大错误,我深表歉意。谢谢

最佳答案

你的问题可以通过每个套接字加入一个以它的 id 命名的组来解决:

socket.join(socket.id);

io.sockets.in(socket.id).emit('to_do', info);

//or

io.sockets.in(clients[0].id).emit('to_do', info);

关于javascript - Express - socket.io - session 。将用户 ID 称为套接字 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40436728/

相关文章:

javascript - kibana 的 Vega 可视化 - 聚合和访问文档字段

c - Socket服务器程序在 "accept"阶段不等待client,死循环运行

c - 通过对套接字文件描述符的 ioctl 调用获取数据包时间戳

C 读取 mac 地址 - 未定义的行为

javascript - document.ready() 什么时候被调用?

Javascript:Codeacademy:丢失的数字

javascript - 为什么我们应该使用 import React from 'react'

javascript - 如何向 NodeJS 服务器提供客户端包 (webpack)?

node.js - Sails可以同时查询两个表吗?

node.js - 如何安装所有相关包?