代码拉取完成,页面将自动刷新
const http = require('http');
const io = require('socket.io');
const os = require('os');
const server = http.createServer((req, res) => {
if (req.url === '/') {
res.writeHead(200, {
'Content-Type': 'text/html',
"access-control-allow-origin":"*"
})
res.end('<h1>Hello Socket</h1>')
}
})
server.listen(9999, () => {
console.log('服务地址:', 'http://127.0.0.1:9999')
})
const socket = io(server, {
// cors: { // 解决跨域
// origin: ["http://127.0.0.1:5500"],
// allowedHeaders: ["my-custom-header"],
// credentials: true
// }
cors: true // 任何域可访问
});
const userList = new Map() // 连接人数
const connList = new Map() // 连接数量
socket.on('connection', (client) => {
console.log('新增一个连接')
client.on('start', (userId) => { // 客户端定义的主题
// userConns里面保存同一个人的多次连接信息
let userConns = userList.get(userId);
if (userConns == null) {
userConns = new Map()
}
// 更新字典中用户的最新连接信息
userConns.set(client, userId)
userList.set(userId, userConns)
// 字典中添加一条连接信息
connList.set(client, userId) // 每一次连接client对象都会变化
console.log(`新成员${userId}加入,当前连接人数为${userList.size},连接数量为${connList.size}`)
})
client.on('disconnnect', () => {
const userId = connList.get(client);
if (userId) {
const userConns = userList.get(userId)
if (userConns) {
userConns.delete(client)
}
if (userConns.size === 0) { // 当前用户连接数量为0
userList.delete(userId) // 连接人数里面清除该人
} else { // 更新该人对应连接信息
userList.set(userId, userConns)
}
// 连接数量里面清除该连接
connList.delete(client)
}
console.log(`断开连接${userId}加入,当前连接人数为${userList.size},连接数量为${connList.size}`)
})
})
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。