12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- var express = require('express') //引入express模块
- var http = require("http") //引入http模块
- var app = express()
- app.use('/', express.static('./public')); //设置静态资源路径
- var server = http.createServer(app)
- server.listen(3000,'0.0.0.0'); //监听端口3000
- var io = require('socket.io').listen(server); //引入socket.io模块并绑定到服务器
-
- var AllUser=[];
- io.on('connection',function(socket){
-
- socket.on("login",function(r){//接收请求 r 为前端发送的参数 r.name 用户名称 r.img 用户头像
- let user = {
- name:r.name,
- img:r.img,
- ip:socket.handshake.address,
- id:r.id,
- socket:socket
- }
- if(r.id=='' || r.id=="undefined"){//如果是新访问的用户是没有id存在cookie的 需要用soucket的id 否则就使用cookie的id
- user.id = socket.id;
- }else{
- socket.id=r.id;
- }
-
- AllUser.push(user);//将定义的变量user添加至全局变量AllUser中 用于显示用户列表的用户信息
- var User = [];//定义一个User变量 将用户列表所需的信息添加进去
- for (const key in AllUser) {
- let qq = {
- name:AllUser[key].name,
- img:AllUser[key].img,
- id:AllUser[key].id,
- };
- User.push(qq);
- }
- socket.emit("login",{ "id": user.id});//发送id给客户端 将id设置至cookie中
- io.sockets.emit("AllUser",{"AllUser":User});//给所有在线的用户 发送用户列表更新
- });
- socket.on("send",function(r){//消息发送 r.accept 接收方id r.send 发送方id
- r.date = new Date().toLocaleTimeString();//时间
- if(r.accept=="all"){//如果接收方id为 all 就像所有在线用户发送消息
- io.sockets.emit("send",r);//向公共聊天室发送消息
- }else{//否则就是私聊操作
- socket.emit("send",r);//给当前的用户发送
- for (let i = 0; i < AllUser.length; i++) {
- if(AllUser[i].id == r.accept){//匹配存储的用户信息 id 与 r.accept 接收者相同 给这个用户发送消息
- AllUser[i].socket.emit("send",r);//私聊发送消息
- break;//结束循环
- }
- }
- }
-
- });
-
-
- socket.on('disconnect',function(){//连接断开
- var index = -1;
- for (const key in AllUser) {//找到匹配存储的用户信息 将他从存储用户信息变量中删除
- if(socket.id == AllUser[key].id){
- AllUser.splice(key,1);// key 为数组的索引值 1为删除的个数
- }
- }
- var User = [];
- for (const key in AllUser) {//定义一个User变量 将用户列表所需的信息添加进去
- let qq = {
- name:AllUser[key].name,
- img:AllUser[key].img,
- id:AllUser[key].id,
- };
- User.push(qq);
- }
- io.sockets.emit("AllUser",{"AllUser":User});//更新用户列表信息
- })
-
- });
- console.log("Server running: http://127.0.0.1:3000");//打印控制台
|