Nodejs websocket 使用 socketio库实现实时聊天室.docx
- 文档编号:12622334
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:16
- 大小:38.22KB
Nodejs websocket 使用 socketio库实现实时聊天室.docx
《Nodejs websocket 使用 socketio库实现实时聊天室.docx》由会员分享,可在线阅读,更多相关《Nodejs websocket 使用 socketio库实现实时聊天室.docx(16页珍藏版)》请在冰点文库上搜索。
Nodejswebsocket使用socketio库实现实时聊天室
Node.jswebsocket使用socket.io库实现实时聊天室
认识websocket
WebSocketprotocol是HTML5一种新的协议。
它实现了浏览器与服务器全双工通信(full-duple)。
一开始的握手需要借助HTTP请求完成。
其实websocket并不是很依赖Http协议,它也拥有自己的一套协议机制,但在这里我们需要利用的socket.io需要依赖到http。
之前用Javajsp写过一个聊天,其实实现逻辑并不难,只是大部分时间都用在UI的设计上,其实现原理就是一个基于websocket的通信,要想做一个好的聊天室,我觉得大部分精力可能更应该花在与用户的视觉层交互上。
废话不闲扯,我们先来看一下websocket与传统的ajax有什么不同之处。
在之前,如果我们想要获取到服务器更新的信息,我们可以使用ajax轮询来完成,然而,这样做的弊端是增大了我们与服务器的交互次数,然而极大部分的交互都是无意义的,因为我们只是做一个询问,如果没有任何新的信息,我们几乎什么都不用做,因此这样会极大的浪费服务器资源和带宽。
然而使用websocket会使客户端与服务器建立一个长连接,并且,当服务器有新消息时可以主动推送到客户端,所以我们可以不用一次次的去询问服务器是否有新消息,而是直接由服务器主动推送到客户端,这样在无消息的状态下,客户端不会频繁的去请求服务器。
使用websocket的特点在于服务器可以主动推送消息到客户端。
使用socket.io库实现实时聊天
这也是这篇博文的主题之处。
socket.io发布到npm平台上,我们可以直接用npm来安装到**当前**node_modules目录下。
npminstallsocket.io--save
下面我们就可以直接使用require方法来将这个模块引入
constsocket=require("socket.io");
在创建此websocket服务器之前,它需要依赖于一个已经创建好的http服务器。
letsocketServer=socket.listen(require("http").createServer((req,resp)=>{
//返回页面
resp.end(require("fs").readFileSync("./socketIOTest1.html"));
}).listen(9999,"localhost",()=>{console.log("listening");}));
在上述代码中socketIOTest1.html是在当前目录下的一个html文件,在下面我会贴上详细的代码,这里先稍稍带过。
在websocket服务器对象中有一个connection事件,这个事件在有客户端连接到socket服务器时被触发。
下面我们监听这个事件,打印一句话来表示有用户连接。
//监听connection事件
socketServer.on("connection",socket=>{
console.log("有一用户连接");
}
上述代码中,callback有一个参数socket为连接到客户端的一个socket端口对象,这个对象有一个message事件,当客户端有消息推送到服务器时,事件循环会取出这个事件与之对应的回调函数并执行。
socket.on("message",msg=>{
console.log(msg);
});
同时,socket对象还可以监听disconnect事件,来监听用户断开连接的情况
socket.on("disconnect",()=>{
console.log("有一用户退出连接");
});
因为我们这次的主题是要创建一个能够实时聊天的聊天室,因此光有这些是不够的,我们还需要一个能够与用户交互的客户端。
下面是我的socketIOTest代码:
DOCTYPEhtml>
letsend=document.getElementById("send");
letwrite=document.getElementById("write");
letcontent=document.getElementById("content");
letsocket=io.connect();
//发送消息
send.onclick=()=>{
letmsg=write.value;
//content.innerHTML=content.value+msg+"\n";
socket.send(msg);
};
//接收到消息
socket.on("message",msg=>{
console.log("从服务器接收到的消息:
"+msg);
//更新内容
content.innerHTML=content.value+msg+"\n";
});
socket.on("disconnect",()=>{
console.log("与服务器断开连接");
});