websocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器的全双工通讯-允许服务器主动发起信息个客户端,
websocket’是一种持久协议,http是非持久协议。

使用场景:现在很多网站都有实时推送的需求,比如聊天,客服咨询等。

早期没有websocket的时候,是通过ajax轮询,由于http请求,服务器无法给浏览器主动发送数据,因此需要浏览器定时给服务器发送请求(比如1s一次),服务器把最新的数据响应给浏览器。这种模式的缺点就是浪费性能和资源。

websocket使用

H5中使用
在HTML5中,浏览器已经实现了websocket的api,直接使用即可。
阮一峰websocket

创建websocket对象

//参数1:url:链接的websocket属性
//参数2:protocol 可选的,指定链接协议
var socket = new WebSocket(url,[protocol]);
var socket = new WebSocket('ws://echo.websocket.org')

websocket事件

  • open :链接建立时触发

  • message:客户端接受服务端数据时触发

  • error:通讯错误时触发

  • close:;链接关闭时触发

1.创建websocket服务
var socket = new WebSocket('ws://echo.websocket.org')
2.open 当和websocket服务链接成功的时候触发
socket.addEventListener('open',function*(){
   
   div.innerHTML = '链接服务成功'
})

websocket方法

  • socket.send():使用链接发送数据

  • socket.close():关闭链接

node搭建websocket服务

配置一个基础服务器。

const ws = require('nodejs-websocket')
const PORT = 3000//2、创建一个websocket服务
const server = ws.createServer(connect => {
   
   console.log('用户链接上了')
   //每当接受到用户传递过来的数据,这个text事件就会触发
   connect.on('text',data => {
   
       console.log('接收到用户的数据',data)
       connect.send(data)
   })
})
​
server.listen(PORT,()=> {
   
   console.log('websocket 服务搭建成功')
})
  • 模板
const ws = require('nodejs-websocket')
const PORT = 3000
const server = ws.createServer(connect => {
   
   //接收浏览器传输过来数据
   connect.on('text',data => {
   })
   //关闭websocket链接时候
   connect.on('close',data =>{
   })
   //发生异常时触发
   connect.on('error',data => {
   })
})//server.connections获取所有的用户
function broadcast(server,msg){
   
   server.connections.forEach((coon) => {
   
       coon.sendText(msg)
   })
}
​
server.listen(PORT,()=> {
   
   console.log('websocket 服务搭建成功')
})

socket.IO

socket.IO

npm install socket.io