最近在做一个后台实时通知的项目,项目中用到了socket来实现前后端建立通信,在此记录一下。

<template>    <div>       <h1>测试webSocket</h1><div id ="aaa" style="height: 300px; overflow-y: scroll; background: #333; color: #aaa; padding: 10px;"></div></div>
</template>
<script>var that;
export default {data(){return {data:0,timeout: 30 * 1000,//30秒一次心跳timeoutObj: null,//心跳心跳倒计时serverTimeoutObj: null,//心跳倒计时timeoutnum: null,//断开 重连倒计时websocket: null,}},created() { // 页面创建生命周期函数  that = this;that.initWebSocket()},        destroyed: function () { // 离开页面生命周期函数              that.websocketclose();},        methods: {            initWebSocket: function () {                // WebSocket与普通的请求所用协议有所不同,ws等同于http,wss等同于https                that.websocket = new WebSocket("wss://127.0.0.1:9231/kh_snmptrap/websocket/lsmsp");that.websocket.onopen = that.websocketonopen;that.websocket.onerror = that.websocketonerror;that.websocket.onmessage = that.setOnmessageMessage;that.websocket.onclose = that.websocketclose;// 监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。// window.onbeforeunload = that.onbeforeunload},reconnect: function () { // 重新连接if(that.lockReconnect) return;that.lockReconnect = true;//没连接上会一直重连,设置延迟避免请求过多that.timeoutnum && clearTimeout(that.timeoutnum);that.timeoutnum = setTimeout(() => {//新连接that.initWebSocket();that.lockReconnect = false;}, 5000);},reset: function () { // 重置心跳// 清除时间clearTimeout(that.timeoutObj);clearTimeout(that.serverTimeoutObj);// 重启心跳that.start();},start: function () { // 开启心跳that.timeoutObj && clearTimeout(that.timeoutObj);that.serverTimeoutObj && clearTimeout(that.serverTimeoutObj);that.timeoutObj = setTimeout(() => {// 这里发送一个心跳,后端收到后,返回一个心跳消息,if (that.websocket && that.websocket.readyState == 1) { // 如果连接正常that.websocketsend('heartbeat');} else { // 否则重连that.reconnect();}that.serverTimeoutObj = setTimeout(() => {//超时关闭that.websocket.close();}, that.timeout);}, that.timeout)},setOnmessageMessage: function(event) {let obj = JSON.parse(event.data);// console.log("obj",obj)switch(obj.type) {case 'heartbeat'://收到服务器信息,心跳重置that.reset();break;case 'sendMessage':that.data = obj.dataconsole.log("接收到的服务器消息:",JSON.stringify(obj.data,null,4))document.getElementById('aaa').innerHTML=JSON.stringify(obj.data,null,4)}},websocketonopen: function () {//开启心跳that.start();console.log("WebSocket连接成功!!!"+new Date()+"----"+that.websocket.readyState);},              websocketonerror: function (e) {                console.log("WebSocket连接发生错误" + e);              },              websocketonmessage: function (e) {                console.log(e.data);                // console.log(e);document.getElementById('aaa').innerHTML=e.data},websocketclose: function (e) {that.websocket.close();console.log("connection closed ");},websocketsend(messsage) {that.websocket.send(messsage)},closeWebSocket() { // 关闭websocketthat.websocket.close()}}
}
</script>
<style >
</style>

还有一点,我这里是https的请求,如果你是http请求的话,把wss://127.0.0.1:8888改为ws://127.0.0.1:8888。

关于webSocket建立前后端连接,并进行心跳机制的实现相关推荐

  1. java web 心跳机制实现,基于javax的websocket服务端实现,含心跳机制

    websocket连接类 package com.dnn.controller.inter; import java.io.IOException; import java.text.SimpleDa ...

  2. vue websocket 建立连接并添加心跳检测机制

    图片: 代码: 新建一个文件夹,里面有两个文件 组件1: index.js import Bus from './bus.js'var websocketConnectdCount = 0export ...

  3. html5 长链接,Vue通过WebSocket建立长连接,连接

    Vue通过WebSocket建立长连接,连接 使用场景: 在项目开发中,后端需要处理一连串的逻辑,或者等待第三方的数据返回来进行处理之后在返回给前端,可能时间会很长,而且前端也不知道后端什么时候能处理 ...

  4. socket服务器断开消息,详解JS WebSocket断开原因和心跳机制

    1.断开原因 WebSocket断开的原因有很多,最好在WebSocket断开时,将错误打印出来. ws.onclose = function (e) { console.log('websocket ...

  5. WebSocket的心跳机制和断线重连

    背景 在服务器重启或是弱网情况下,前端不能保证一直连接成功.因此在出现被动断开的情况下,需要有心跳机制和断线重连的功能. 心跳机制:客户端每隔一段时间向服务端发送一个特有的心跳消息,每次服务端收到消息 ...

  6. websocket 心跳机制

    WebSocket 是一种在客户端和服务器之间创建持久连接的技术.为了保持连接的稳定性,就需要通过发送心跳消息来维持 WebSocket 连接. 1.创建一个webscoket基本的使用 // 创建 ...

  7. WebSocket心跳机制

    目录 1 WebSocket简介 2 WebSocket事件与方法 2.1 创建WebSocket实例 2.2 WebSocket 事件 2.3 WebSocket 方法 3 WebSocket的心跳 ...

  8. springboot心跳检测_springboot websocket 实时刷新 添加心跳机制(亲测可用版)

    思路 在我之前的一篇文章当中写到了websocket的实时刷新,但是有个问题没有解决,就是长时间没有数据的时候,这个连接就会自动断开,然后再次进行连接的话,需要再次进行连接.如果加入心跳机制的话,10 ...

  9. php 如何实现心跳包,Socket心跳机制-JS+PHP实现

    本文是我在实际工作中用到的Socket通信,关于心跳机制的维护方式,特意总结了一下,希望对朋友们有所帮助. Socket应用:首先Socket 封装了tcp协议的,通过长连接的方式来与服务器通信,是由 ...

最新文章

  1. 好的开始是成功的一半 -- 怎么做好一个项目的启动...
  2. .NET仓储模式高级用例
  3. 人的一生,有三件事情不能等
  4. IPv6环境下路由器支持域名登录
  5. 万网mysql中文乱码_Linux下MySQL出现乱码的解决方法-阿里云开发者社区
  6. 玩转oracle 11g(28):ora-00064和程序异常终止
  7. python子进程修改父进程内变量_如何将父变量传递给python中的子进程?
  8. linux std::queue 怎么释放内存_电脑卡慢怎么办?一个小工具帮你轻松释放内存,瞬间提升电脑性能...
  9. c++数字金字塔_“资金管理是投资最大的秘密”(超级干货),一生死记“金字塔加仓减仓法”,最安全稳健的操盘法方式!...
  10. ch4 MySQL 安全管理
  11. qt-sdk-linux,在linux系统上安装qt-sdk步骤.doc
  12. export `=' not a valid identifier的一般原因
  13. 函数加正则实现简单计算器
  14. Linux系统故障排查和修复技巧
  15. ps教程分享:一定要记住这20种PS技术!
  16. python cprofile_Python Profilers 分析器
  17. Protel Dxp2004 创建库
  18. otg usb 定位_怎样打开安卓手机外接USB功能(即OTG功能)
  19. 网站模板制作有什么技巧呢?
  20. 计算机工程师对社会报答什么,报答作文400字(精选10篇)

热门文章

  1. 为什么parsefloat加出来还是字符串_Python 100天从新手到大师 | Day 7 字符串与数据结构...
  2. python改文件名_python批量修改文件名、批量修改xml文件的path和filename
  3. iphonex黑屏开不了机_手机突然黑屏开不了机充电没反应怎么办?别急,这样就可以解决...
  4. 为什么招聘单片机工程师的时候要求精通C/C++?
  5. 开源项目|从0到1教你搭建一个适配于智能车的目标检测系统
  6. 谁更了解你,是女朋友吗。不,是这些推荐算法。
  7. 高倍数泡沫装置PHP_找煤机网:BGP高倍数泡沫灭火装置
  8. mysql主从配置 51cto_Mysql主从复制配置
  9. php模拟环境搭建,PHP环境搭建最新方法
  10. JWT(Json web token)认证详解