红包
◆ [2024-12-21 星期六 22:21] ◆
您来自:18.118.162.53,欢迎您访问風雲工作室。
◆
收藏本站
◆ | ◆
设为首页
◆
联系站长(腾讯QQ)
5029111 [風雲]
〓
站长当前离线
〓
首 页
论坛交流
游戏频道
无忧脚本
旧版论坛
云服务器
聊 天 室
自助链接
来访记录
访客留言
搜索提供
位置:
風雲工作室
-
论坛交流
-
技术专栏
-
后台开发
- 【原创】nodejs 实现简单功能基本完整的 WebSocket
返回
主题:【原创】nodejs 实现简单功能基本完整的 WebSocket
風雲
★☆☆☆☆☆☆☆☆☆
积分:58
发帖:62
登录:2024/3/26
注册:2006/9/17
(1楼)
【原创】nodejs 实现简单功能基本完整的 WebSocket
实现了加入房间,群发消息功能,没做私聊。
const WS = require("ws").Server; var chat = new ChatRoom; new WS({ port: 8080 }).on("connection", ws => { var user = new ChatUser(ws); ws.on("message", res => user.onMsg(res)); ws.on("close", res => user.exit(res)); ws.on("error", err => console.log(err)); }); console.log("WebSocket 服务侦听于端口 8080"); function ChatRoom() { this.join = (user, roomName) => { let room = rooms[roomName] || { name: roomName, id: 0, users: new Object, count: 0 }; if(!room.id) rooms[roomName] = room; user.id = ++room.id; room.count++; user.room = room; room.users[user.id] = user; return user.id; }; this.kick = user => { if(!user.room) return; let room = user.room; room.count--; delete user.room; delete room.users[user.id]; if(room.count) return; delete rooms[ room.name ]; console.log(`房间 ${room.name} 被销毁`); }; var rooms = new Object; } function ChatUser(ws) { this.onMsg = res => { try{ res = JSON.parse(res); } catch(err) { console.log("数据格式异常:" + res); } if(res.type == "join") return this.doJoin(res.data); this.sendAll(res); }; this.send = msg => { if(ws.readyState != 1) return console.log("暂时无法发送", ws.readyState); ws.send(JSON.stringify(msg)); }; this.sendAll = msg => { var room = this.room; if(!room) return; for(var x in room.users) room.users[x].send(msg); }; this.exit = () => ws.readyState != 3 ? ws.close() : chat.kick(this); this.doJoin = data => { data.id = chat.join(this, data.room); this.send({ type: "join", data: data.id }); this.sendAll({ type: "welcome", data }); }; }
[您可以先修改代码再运行]
时间:
2021年1月6日 9:00:08
IP:
已记录
引用
回复
風雲
★☆☆☆☆☆☆☆☆☆
积分:58
发帖:62
登录:2024/3/26
注册:2006/9/17
(2楼)
协议要求,onopen 的时候发送:
ws.send(JSON.stringify({ data: { room: "RoomName", nick: "Nick", icon: "Icon" }, type: "join" }));
然后就进入了 RoomName 聊天室。
时间:
2021年1月6日 9:03:28
IP:
已记录
引用
回复
© Copyright 2006-2024,
風雲工作室
All rights reserved.
【
湘ICP备05009306号
】
QQ登录
操作 1 个库,连接 3 次,执行 8 次,耗时 62 毫秒。