【问题标题】:Generate custom socket id for socket.io为 socket.io 生成自定义套接字 id
【发布时间】:2021-12-29 03:22:25
【问题描述】:

根据socket.io documentation for generating custom id 这应该可以工作:

const express = require('express');
const app = express();
const server = require('http').createServer(app);
const io = require('socket.io')(server);
require('dotenv').config();

io.engine.generateId = (req) => {
  // generate a new custom id here
  var randomCode = '';
  for (let r = 0; r < 6; r++) {
    randomCode += Math.floor(Math.random() * 10)+'';
  }
  return randomCode
}

io.on('connection', (socket) => {
  console.log("a user connected :D", socket.id);

  socket.on('storeClientInfo', (data) => {
    console.log(socket.id)
  });

  socket.on("private message", (anotherSocketId, msg) => {
    console.log(anotherSocketId, msg)
    socket.to(anotherSocketId).emit("private message", socket.id, msg);
  });
});

server.listen(4000);
app.listen(process.env.PORT, () => console.log('Server is running'));

但控制台输出对我不起作用:

a user connected :D wJ8d-SC2su9YYCdWAAAC

应该是6个随机数,这个随机数只是为了测试我想稍后在数据库中将id分配给用户id。

【问题讨论】:

    标签: node.js express socket.io


    【解决方案1】:

    使用可以将自定义参数分配给套接字

    var users = []
    io.use((socket, next) => {
      socket.customId = 123456789;
      users[socket.customId] = socket;
      next()
    });
    

    您可以在

    中使用自定义参数
    io.on("connection", (socket) => {
      socket.on("sendPrivateMessage", params => {
        users[params.toUserId].emit("message", "you have a private message")
      })
    });
    

    【讨论】:

    • 但是怎么给这个id发私信呢?
    • 我修改了私信代码
    • 如果将所有连接的用户存储在数组中会影响性能吗?我真的不知道socket.io是如何保存id的
    • 你用的是哪个版本
    • socket.io 版本 4.3.2
    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    相关资源
    最近更新 更多