Nodejs如何实现多房间简易聊天室功能

  介绍

这篇文章给大家分享的是有关Nodejs如何实现多房间简易聊天室功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

JS是什么

JS是JavaScript的简称,它是一种直译式的脚本语言,其解释器被称为JavaScript引擎,是浏览器的一部分,主要用于web的开发,可以给网站添加各种各样的动态效果,让网页更加美观。

<强> 1,前端界面代码

前端不是重点,够用就行,下面是前端界面,具体代码可到github下载。

<强> 2,服务器端搭建

本服务器需要提供两个功能:http服务和websocket服务,由于节点的事件驱动机制,可将两种服务搭建在同一个端口下。

1,包描述文件:package.json,这里用到了两个依赖项,mime:确定静态文件mime类型,插座。io:搭建websocket服务,然后使用npm install 安装依赖

{   ,“name":,“chat_room"   ,“version":,“1.0.0"   ,“description":“却;能够is  a  room  where 你还要chat  with  your  friends"   ,“main":,“index.js"   ,“scripts": {   “test"才能:,“echo  \“错误:,no  test 指定\“,,,,exit  1“;   },   ,“author":,“sfs"   ,“license":,“ISC"   ,“dependencies": {   “socket.io"才能:“2.0.3"   “mime"才能:“1.3.6"   ,}   }

2, http服务器

http服务主要是给网页浏览器提供静态文件,既浏览器发来一个请求,服务器返回一个响应。

const    http=才能要求(& # 39;http # 39;),   fs=才能要求(& # 39;fs # 39;),   路径才能=要求(& # 39;path & # 39;),   mime=才能要求(& # 39;mime # 39;),   chatServer=才能要求(& # 39;。/lib/chat_server& # 39;);      var 缓存={},//缓存静态文件内容//发送错误响应   function  send404(响应){   response.writeHead才能(404年,{& # 39;内容类型# 39;:& # 39;文本/平原# 39;});   response.write才能(& # 39;Error  4.4:文件未找到# 39;公司);   response.end才能();   }//发送文件内容   function  sendFile(响应,filePath filecontent) {   response.writeHead才能(   200年,,,,   ,,,{“content-Type": mime.lookup (path.basename (filePath))}   ,,);   response.end才能(filecontent);   }//查找文件   function  serveStatic(响应缓存,absPath) {   如果才能(缓存(absPath)) {   ,,,sendFile(响应,absPath,缓存[absPath]);   }{其他才能   ,,,fs.exists (absPath、功能(存在){   ,,,,,如果(存在){   ,,,,,,,fs.readFile (absPath、功能(呃,数据){   ,,,,,,,,,如果(err) {   ,,,,,,,,,,,send404(响应);   ,,,,,,,,,其他}{   ,,,,,,,,,,,缓存[absPath]=数据;   ,,,,,,,,,,,sendFile(反应、absPath、数据);   ,,,,,,,,,}   ,,,,,,,});   ,,,,,其他}{   ,,,,,,,send404(响应);   ,,,,,}   ,,,});   ,,}   }//入口   var 服务器=http.createServer(函数(请求、响应){   var 才能;filePath=false;   console.log才能(“new  request  for  $ {request.url} ');   如果才能(request.url===& # 39;/& # 39;) {   ,,,filePath=& # 39;公共/index . html # 39;;   }{其他才能   ,,,filePath=& # 39;公共# 39;+ request.url;   ,,}      var 才能;absPath=& # 39;。/& # 39; + filePath;   serveStatic才能(响应、缓存、absPath);   });   server.listen(3000年,函数(){   console.log才能(“,server  is  listening 提醒prot  3000年!”);   });   chatServer.listen(服务器),,//websocket服务也绑定到该端口上

3,插座服务

插座。io提供了开箱既用的虚拟通道,所以不需要任务手动转发消息到已连接的的用户,可以使用socket.broadcast.to(房间).emit(& # 39;消息# 39;& # 39;你好# 39;);房间为某个聊天室id

const    socketio=才能要求(& # 39;socket . io # 39;);   var  io,   ,,guestNumber=1//用户编的号   昵称才能={},,,//socket  id对应的昵称   namesUsed才能={},,,//所有已使用的昵称   allRooms才能={},,,//聊天室——人数   currentRoom={};才能,//sockid——聊天室   module.exports.listen=function(服务器){   io才能=socketio.listen(服务器);   io.serveClient才能(& # 39;log 水平# 39;,1);   io.sockets.on才能(& # 39;连接# 39;,函数(插座){   ,,,guestNumber=assignGuestName(插座、guestNumber昵称);   ,,,joinRoom(插座,& # 39;游说# 39;);   ,,,handleMessageBroadcasting(插座、昵称);   ,,,handleNameChangeAttempts(插座,昵称,namesUsed);   ,,,handleRoomJoining(插座);   ,,,on(& # 39;房间# 39;函数(){   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Nodejs如何实现多房间简易聊天室功能