1 Star 0 Fork 0

ike_yu/myNode

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
socket.js 2.15 KB
一键复制 编辑 原始数据 按行查看 历史
ike_yu 提交于 2024-01-11 17:26 . 'websocket完结'
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}`)
})
})
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ike_yu/my-node.git
git@gitee.com:ike_yu/my-node.git
ike_yu
my-node
myNode
master

搜索帮助