1.什么是websocket
websocket是一个网络协议,主要用于客户端和服务器之间保持连接的情况下完成数据交互的一种网络协议,经常被用于网络客服应用中
HTTP:超文本传输协议,经常在浏览器和服务器之间的数据交互
HTTP是一种短链接协议,一个请求发送之后,一旦服务器返回数据,连接就会断开
更新网页数据:必须发送请求,获取响应后才能更新网页中展示的数据解决方案:不能使用HTTP短连接,需要通过长连接的形式,完成连接保持,服务器才能通过保持的连接,给对应的客户端主动推送消息,长连接的实现方式比较常用,如websocket协议
2.案例:聊天室的实现
1.socket 第三方模块
支持websocket协议的操作模块,有一个支持很多语言环境的通用模块:socket.io
socket.io是一个独立的实时网络服务框架
2.常用api
服务端
const express = require('express')
const {createServe} = require('http')
const {server} = require('socket.io')
const app = express()
const httpServer = createServer(app)
const io = new Server(httpServer,{配置选项,如CORS跨域支持})
httpServer.listen(3000)
客户端
<script src='http://localhost:3000/socket.io/socket.io.js'></script>
<script>
//建立连接
let webSocket = io('http://localhost:3000')
</script>
消息交互:使用websocket对象,通过事件的监听和触发完成消息的交互
//监听事件,等待接收消息
websocket.on(事件名称,msg=>{回调函数中处理接收到的消息msg})
//触发事件:用于发送消息
websocket.emit(事件名称,消息内容) // 给对应的另一端发送消息
io.sockets.emit(事件名称,消息内容) //给所有连接的socket端发送消息
聊天室分房间
长连接操作过程中,数据的交互可以通过房间(room)的操作,进行消息隔离
websocket.join(room):加入房间的api
io.to(room).emit(event,msg): 给指定的房间发送事件对应的消息