websocket和node一起搭建一个简单聊天室,全部源码已经上传到github 
具体实现 环境搭建 创建一个文件夹,建立相对应的css目录,js目录(其他可以先不用管)
 再根目录下执行命令,安装socket.io
 
项目搭建 1.构建服务器 在js目录下建立一个app.js
1 2 3 4 5 6 7 let  app = require ('http' ).createServer ();let  io = require ("socket.io" )(app);let  port = 3000 app.listen (port,function ( ){     console .log ("3000端口已启用" ) }) 
 
2.建立服务端socket连接监听 大家可以看一下socket.io 的文档 (1)socket.emit 客户端与服务器端之间发送消息是用emit 例如客户端向服务端发送登录请求 socket.emit(‘event’,data) event是自定义的事件,后面是带的参数 (2)socket.on 服务器端要接收客户端发送的自定义事件,就得对该事件进行监听 socket.on(‘event’,function(data){})在回调函数中进行处理 同理,服务器端也可以向客户端发送事件,只要客户端也对该事件进行监听就行 (3)io.sockets.emit 服务器端向连接的所有客户端发送消息得用io.sockets.emit (4)socket.broadcast.emit 给除了自己以外的客户端广播消息
功能(1):登录 客户端  获得的用户输入的昵称信息,发送到服务器,触发login事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 window .onload  = function ( ){    var  socket = io ('ws://localhost:3000' );     console .log (socket)     var  nickName = null ;     $('#l_btn' ).click (function ( ){         nickName = $('#login_name' ).val ();         if (nickName){             socket.emit ('login' ,{userName :nickName})         }else {             alert ("请输入用户名" )         }     }) } 
 
服务器 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 let  app = require ('http' ).createServer ();let  io = require ("socket.io" )(app);let  port = 3000 let  user = []io.on ('connection' , function  (socket ) {          let  userName = null ;     socket.on ('login' ,function (data ){         userName = data.userName ;         let  index = user.findIndex (e  =>  e==userName)         if (index === -1 ){             user.push (userName);             socket.emit ("loginSuccess" ,userName);             io.sockets .emit ("add" ,userName)         }else {             socket.emit ("loginFail" ,'' )         }     }) } app.listen (port,function ( ){     console .log ("3000端口已启用" ) }) 
 
登录成功与失败,因为没有连接数据库,所以用user数组来保存,如果数组中没有相同的用户名,则登录成功,并告知所有客户端;如果出现了相同的用户名,则登录失败。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 socket.on ("loginSuccess" ,function (data ){     if (nickName === data){         $(".chat" ).show ('slow' )         $(".login" ).hide ('slow' )     } }) socket.on ("loginFail" ,function (data ){     alert ("登录失败" ) }) socket.on ("add" ,function (data ){     var  html = `<div class="office">${data} 加入群聊</div>`      $(".content" ).append (html); }) 
 
功能(2):发送数据 当点击发送按钮时,告知服务器发送的数据和用户名,服务器告知所有客服端收到的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 $(".send" ).click (function ( ){         let  message = $("#editor" ).html ();         console .log (message)                  $("#editor" ).html ("" );         if (message){             socket.emit ("sendMessage" ,{userName :nickName,msg :message})         }         var  str = `<div class="my">                               <span>${message} </span>         <span>${nickName} </span>         </div>`         $(".content" ).append (str);     })     socket.on ("otherMessage" , function (data ){         if (data.userName  === nickName){             return          }         var  str = `<div class="other">          <span>${data.userName} </span>         <span>${data.msg} </span>         </div>`         $(".content" ).append (str);     }) 
 
1 2 3 4 5 socket.on ('sendMessage' ,function (data ){     console .log (data)     io.sockets .emit ("otherMessage" ,data) }) 
 
功能(3):退出登录 退出登录告知所有客服端,用户xxx退出了
1 2 3 4 5 6 7 socket.on ('leave' ,function (name ){     if (name != null ){         var  html = `<div class="office">${name} 退出群聊</div>`          $(".content" ).append (html);     } }) 
 
1 2 3 4 5 6 7 8 9 10 socket.on ('disconnect' ,function ( ){        io.sockets .emit ('leave' ,userName)    user.map (function (val,index ){        if (val === userName){            user.splice (index,1 );        }    }) }) 
 
功能(4):发送emoji表情 用了jquery的插件emoji , 这两个文件夹是关于emoji的 初始化emoji
1 2 3 4 5 6 7 8 9 10 11 12 13 14 $("#editor" ).emoji ({     button : "#btn" ,          animation : 'slide' ,     position : 'topLeft' ,     icons : [{         name : "QQ表情" ,         path : "/dist/img/qq/" ,         maxNum : 91 ,         excludeNums : [41 , 45 , 54 ],         file : ".gif" ,         placeholder : "#qq_{alias}#" ,     }], }); 
 
在本地是看不到表情包的,可以再根目录的cmd下输入http-server到8080端口上看
全部源码已经上传到github