为 socket.io 生成自定义套接字 id
Posted
技术标签:
【中文标题】为 socket.io 生成自定义套接字 id【英文标题】:Generate custom socket id for socket.io 【发布时间】: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。
【问题讨论】:
【参考方案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以上是关于为 socket.io 生成自定义套接字 id的主要内容,如果未能解决你的问题,请参考以下文章
Socket.io node.js,如何避免记录连接时间或考虑页面刷新/多个套接字?
如何在socket.io中的断开事件上获取断开连接的客户端的套接字ID