var WebSocketServer = require('ws').Server, ws = new WebSocketServer({ port: 3000 }); // 群的数据结构 // 10086: [ // { // userName: '刘兵', // userAuthor: 'http://1.com/1.jpg', // roomNumber: 10086, // userSocket: "WebSocket", // type: 1 ,// 1 群主 2 管理员 3 群成员 // } // ] var groundList = { } ws.on('connection', function (io, req) { console.log('前端简历链接....'); io.on('message', function (message) { var text = JSON.parse(message.toString()); switch (text.type) { case "SocketHealthy": send(io,{ type: 'SocketHealthy', data: "pong" }) break; case "SocketUser": console.log("用户消息:", text) switch (text.action) { case "send": SendAllExceptTheSender(text.data) break; case "userList": SendAll(text.data, { type: "SocketUser", action: 'list', data: groundList[text.data.room] }) break; } // send(io,{ type: 'SocketUser', data: "这是SocketUser的测试消息" }) break; case "SocketSystem": console.log("系统消息:", text) switch (text.action) { case "join": joinUser(io,text.data) break; } break; } }); }); function joinUser(io,info) { console.log("用户加群:", info); // 如果已经有这个群了 if (groundList.hasOwnProperty(info.room)) { console.log("已经有这个群了") groundList[info.room].push({ userName: info.name, userAuthor: info.img, roomNumber: info.room, userSocket: io, type: 3 }) // 没有这个群 } else { console.log("没有这个群") groundList[info.room] = []; groundList[info.room].push({ userName: info.name, userAuthor: info.img, roomNumber: info.room, userSocket: io, type: 1 }); } SendAll(info, { type: 'SocketSystem', action: 'joinMessage', data: `欢迎用户 ${info.name} 加入群聊!` }) console.log(groundList) } function SendAll(info, message) { var currentUserGround = groundList[info.room]; currentUserGround.forEach(v => { v.userSocket.send(JSON.stringify(message)) }) } // 向群内所有人推送消息,但是排除消息发送者自己 function SendAllExceptTheSender(info) { var currentUserGround = groundList[info.room]; currentUserGround.forEach(v => { if (info.name != v.userName) { v.userSocket.send(JSON.stringify({ type: 'SocketUser', action: 'to', data: info })) } }) } function send(socket,data) { socket.send(JSON.stringify(data)); }