nodejs 与webSocket 模拟简单的聊天室

//工程说明

//js文件:service.js

//聊天室文件(html):chatRoom.html

//需要引入的模块:http、fs、ws(http与fs为系统模块,可直接引入,ws为webSocket模块,需要npm或者cnpm下载到工程主目录中)

/*===================service.js文件中代码================*/

//开启聊天室服务

const http = require('http');

//读取文件

const fs = require('fs');

//客户端服务

var server = http.createServer((req,res)=>{

              res.writeHead(200,{'Content-Type':'text/html;charset=utf8'});

              //将页面显示到浏览器中

              res.end(fs.readFileSync('./chatRoom.html'));

});

//引入socket服务,注意大小写,区分客户端服务

const Server = require('ws').Server;

//建立好服务端,在这里监听客户端的服务(server)

var wss = new Server({server})

//存放前端连接的socket

var clientMap = {};

//记录进入聊天室的客户数量

var count = 0; //只做计数

var id = 0; //用作客户的id

//当客户端连接上时就会触发,回调会接收一个scoket对象

wss.on('connection',function(socket){

           count ++;

           id ++;

           //给每个客服添加一个id编号,

           socket.id = id;

           //以id编号存储客户数据

           clientMap[socket.id] = socket;

           //在服务端监听上线客户

           console.log('第'+count+'用户上线了');

           //当客户端向服务端发送数据时触发

           socket.on('message',function(msg){

                     broadcast(socket,msg);

            })

            //当客户端下线即断开时触发

           socket.on('close',function(){

                     count --;

                     //将下线的客户移出当前的聊天室

                    delete clientMap[socket.id];

           })

           //当客户连接错误时触发

          socket.on('error',function(err){

                    console.log('客户连接错误:'+err);

           })

})

//创建广播函数,向所有的客户端发送某一个客户端说的话,模拟聊天室

function broadcast (socket,msg){

             for(var id in clientMap){

                     clientMap[id].send('用户'+socket.id+'说:'+msg);

              }

}

//设置端口

server.listen(1314);

/*=================chatRoom.html文件中代码=================*/

//聊天室简单样式,写到header标签中

.room{

       border: solid 1px #efefef;

       width: 300px;

       height: 300px;

       overflow-y: scroll;

}

//聊天窗口

     

     

     

/*==================script中的js代码===================*/

//创建客户端的socket连接

//注意:socket的IP地址要与服务端的一致,包括端口号

var wsc = new WebSocket('ws://10.9.166.78:1314');

//检测聊天室的开关状态

var isOpen = true;

//当客户端连接上的时候触发

wsc.onopen = function(e){

        console.log("我成功进入聊天室了")

}

//后台返回消息的时候触发

wsc.onmessage = function(e){

          document.getElementsByClassName('room')[0].innerHTML += '

'+e.data+'

';

}

//当服务端关闭的时候触发

wsc.onclose = function(e){

        isOpen = false;

        alert('聊天室已经关闭了');

}

//错误状况下触发

wsc.onerror = function(e){

       console.log('连接错误');

}

//向服务端发送数据

send.onclick = function(){

          if(!isOpen){

                  alert('聊天室已经关闭了,不能聊天了')

           }else{

                  if(mes.value == ''){

                         alert('发送的内容不能为空')

                  }else{

                         wsc.send(mes.value);

                  }

         }

}

/*==================结束==================*/

在终端执行下面的命令开启你的本地服务:

node    service.js

将你设置的ip地址发给别人,尝试聊天吧,本项目中的ip为:

http://10.9.166.78:1314

你可能感兴趣的:(nodejs 与webSocket 模拟简单的聊天室)