WebSocket与sse

区别:

1.WebSocket是全双工通道,可双向通信;sse是单向通道,只能服务器向浏览器发送

2.WebSocket是一个新协议,需服务端支持;SSE则是部署在HTTP协议之上,现有的服务器软件都支持

3.SSE是一个轻量级协议,相对简单;WebSocket是一种较重的协议,相对复杂

4.SSE默认支持断线重连,WebSocket则是需要额外部署

5.SSE支持自定义发送的数据类型

SSE

let sse = new EventSource ('http://localhost/sse');   //服务器不断向我们发送信息

see.onmessage=function(evt) {

  var el = document.getElementById('sse')

   el.innerHTML = evt.data

}

-- // 服务器死循环事件流向我们推送

--

let sse = new EventSource ('http://localhost/sse-retry');  //通过不断重试的机制来完成服务器主动推送

WebSocket

cinst uid='xxx'

// 表示我们是否是手动关闭的ws

let isHandle = false

let ws= new WebSocket(`ws://localhost:8081/ws/${uid}`)

let timer = null

const openHandle = () => {

  console.log('ws连接成功啦!!')

}

const closeHandle = () => {

  console.log('ws关闭成功啦!!')

if(!isHandle ) {      //不是手动时触发

  restart()     //连接关闭时 尝试重连

}

}

const messageHandle = () => {

  console.log('前端接受到消息啦!!')

}

const errorHandle = () => {

  console.log('ws出错啦!!')

}

ws.addEventListener('open', openHandle)

ws.addEventListener('close', closeHandle )

ws.addEventListener('message', messageHandle )

ws.addEventListener('error', errorHandle )

--

const sendMessage = () => {

console.log('我发送了消息')

  ws.send('i鱼鱼鱼')

}

const closeWs = () => {   // 手动关闭

  isHandle = true

   ws.close()

}

<Button @click='sendMessage'> 打开连接<Button>

<Button @click='closeWs '> 关闭连接<Button>

服务线断掉了 ,WebSocket关闭 启动之后,客户端无法自动连接服务端(客户端没自动连接),处理方法:重连

//重连  --- setInterval restart

const restart = () => {

 console.log('客户端与服务端连接失败,准备开始重连')

 timer = setInterval(() => {

 console.log('重连中.....')

 ws= new WebSocket(`ws://localhost:8081/ws/${uid}`)

 if(ws.readyState == 0) {  // 重连成功

  clearInterval(timer)

   timer = null

// 事件需重新绑定

ws.addEventListener('open', openHandle)

ws.addEventListener('close', closeHandle )

ws.addEventListener('message', messageHandle )

ws.addEventListener('error', errorHandle )

},1000)

}

-- 另外

// 心跳机制

1. // setInterval 持续给websocket服务端发送ping包

持续给websocket发送一个包,如果服务端一直有在收到这个包,客户端和它连接是正常的

2.close里重连restart

 websocket卸载

onInmountes钩子里 或者 vueUse钩子

// vueUse

impirt { tryOnUnmounted } from '@/vueuse/core'

tryOnUnmounted (()  => {

  closeWs()

})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值