vue + websocket 的使用

时间:2022-10-20 23:52:02

阳光正好,我们正在努力前行。

一。引言

初始使用websocket ,一开始看文档的时候,觉得很简单,只需要创建websocket实例,然后有几个监听打开连接,监听关闭连接,监听连接异常等方法。但是, 在项目中使用的时候,就会发现 不是那么的简单 。。。通过这篇博客能够给大家讲一下什么是websocket ,如何在项目中实际去使用websocket。

二。什么是websocket

WebSocket是一种在单个TCP连接上进行全双工通信的协议(摘自*)。我们都知道Http协议,通信由客户端发起。但是,有需求需要我们在客户端不发起通信的时候,由服务器端发送,此时就需要websocket了。

websoket是通过客户端向服务器建立连接,保持客户端和服务器端双向的通信的过程。

三。websocket 的使用

1>readyState属性返回实例对象的当前状态。共四种:

  CONNECTING:值为0,表示正在连接。

  OPEN:值为1,表示连接成功,可以通信了。

  CLOSING:值为2,表示连接正在关闭。

  CLOSED:值为3,表示连接已经关闭,或者打开连接失败。

2> onopen: 实例对象的onpen属性,用于指定连接成功后的回调函数。

3>onclose: 实例对象的onclose属性,用于指定连接关闭后的回调函数。

4>onmessage: 实例对象的onmessage属性,用于指定收到服务器 数据后的回调函数。

5>send:实例对象的send()方法用于向服务器发送数据

var ws = new WebSocket("wss://echo.websocket.org");

ws.onopen = function(evt) {
console.log("Connection open ...");
ws.send("Hello WebSockets!");
}; ws.onmessage = function(evt) {
console.log( "Received Message: " + evt.data);
ws.close();
}; ws.onclose = function(evt) {
console.log("Connection closed.");
};
ws.onerror = function() {
console.log('Connection error‘)
}

四。在vue 中如何使用

1》创建websocket连接,同时在websocket实例上挂在上监听打开,监听关闭,监听异常,监听消息的方法

init() {
let url = 'wss://finance.allhome.com.cn/scanCodeLogin'
// 创建websocket连接
this.websock = new WebSocket(url);
    // 监听打开
this.websock.onopen= this.websockOpen;
    // 监听关闭
this.websock.onclose = this.websockClose;
    //监听异常
this.websock.onerror = this.websockError;
    //监听服务器发送的消息
this.websock.onmessage = this.websockMessage;
},

2》监听打开,监听关闭,监听异常,监听消息的方法

websockOpen() {
console.log('监听打开')
},
websockClose() {
console.log('监听关闭)
},
websockError() {
console.log('监听异常')
}
websockMessage(e) {
console.log('监听服务器发送的消息',e.data)
}

四。遇见的坑

1>长连接 在长时间不发送消息的时候,会自动断开。原因是运维那块使用了nginx服务,会配置一个时间段, 在这个时间里,如果一直灭有数据的传输,连接就会在这个时间之后自动关闭。因为我们无法控制用户什么时候去触发websocket消息的推送。那么解决方案是:

心跳保持连接:实现心跳检测的思路是: 每隔固定的时间,发送一个数据到服务器,服务器接收之后,返回一个数据给客户端。如果客户端onmessage事件能监听到返回的数据,则表示连接未断开。否则,表示连接断开,需要客户端去重新发送请求进行连接。

start() {
    // 发送心跳
clearInterval(this.timeoutObj)
this.timeoutObj = setInterval(() => {
let date = new Date()
this.webSocket.send(`发送心跳给后端${date}`)
}, * * )
}

参考博客: https://www.cnblogs.com/tugenhua0707/p/8648044.html

如果不正确的,请多多指教!!!

遇见关于websocket的问题,会继续更新的~~~

 

vue + websocket 的使用的更多相关文章

  1. vue+websocket+express+mongodb实战项目(实时聊天)

    继上一个项目用vuejs仿网易云音乐(实现听歌以及搜索功能)后,发现上一个项目单纯用vue的model管理十分混乱,然后我去看了看vuex,打算做一个项目练练手,又不想做一个重复的项目,这次我就放弃颜 ...

  2. vue+websocket+express+mongodb实战项目(实时聊天)(二)

    原项目地址:[ vue+websocket+express+mongodb实战项目(实时聊天)(一)][http://blog.csdn.net/blueblueskyhua/article/deta ...

  3. Vue+WebSocket+ES6+Canvas 制作「你画我猜」小游戏

    Vue+WebSocket+ES6+Canvas 制作「你画我猜」小游戏 转载 来源:jrainlau 链接:https://segmentfault.com/a/1190000005804860 项 ...

  4. SpringBoot+Vue+WebSocket 实现在线聊天

    一.前言 本文将基于 SpringBoot + Vue + WebSocket 实现一个简单的在线聊天功能 页面如下: 在线体验地址:http://www.zhengqingya.com:8101 二 ...

  5. vue+websocket demo 实例

    vue+websocket demo: <!-- vue + websocket连接demo --> <template> <div class="" ...

  6. Vue&plus;WebSocket 实现页面实时刷新长连接

    最近vue项目要做数据实时刷新,折线图每秒重画一次,数据每0.5秒刷新一次,说白了就是实时刷新,因为数据量较大,用定时器估计页面停留一会就会卡死... 与后台人员讨论过后决定使用h5新增的WebSoc ...

  7. Vue &plus;WebSocket &plus; WaveSurferJS 实现H5聊天对话交互

    引言 在与实现了语音合成.语义分析.机器翻译等算法的后端交互时,页面可以设计成更为人性化.亲切的方式.我们采用类似于聊天对话的实现,效果如下: 智能客服(输入文本,返回引擎处理后的文本结果) 语音合成 ...

  8. 【土旦】Vue&plus;WebSocket 实现长连接

    1.websocket 连接代码 created() { this.initWebsocket() }, methods: { // 初始化websocket initWebsocket() { le ...

  9. websocket介绍 以及 vue websocket使用案例

    1 介绍: https://www.zhihu.com/question/20215561 2 案例: https://www.jianshu.com/p/0d20a032d0ec (坑说明). ht ...

随机推荐

  1. &lbrack;SDK2&period;2&rsqb;Windows Azure Virtual Network &lpar;2&rpar; 创建简单的Virtual Network

    <Windows Azure Platform 系列文章目录> 本章笔者将介绍如何创建一个简单的 Virtual Network. 1.首先我们登陆Windows Azure管理界面 ht ...

  2. java 学习资料

    最近一直在从java基础开始学习java,感觉个人学习思路还是比较混乱的. 看到Java工程师成神之路中介绍了需要学习的知识点,并在<成神之路系列文章>中分章分节的开始介绍其中所有的知识点 ...

  3. Android Bug分析系列:第三方平台安装app启动后,home键回到桌面后点击app启动时会再次启动入口类bug的原因剖析

    前言 前些天,测试MM发现了一个比较奇怪的bug. 具体表现是: 1.将app包通过电脑QQ传送到手机QQ上面,点击安装,安装后选择打开app (此间的应用逻辑应该是要触发 [闪屏页Activity] ...

  4. Node&period;js Cheerio parser breaks UTF-8 encoding

    From: https://*.com/questions/31574127/node-js-cheerio-parser-breaks-utf-8-encoding [问题] ...

  5. &lpar;转载&rpar;西门子PLC学习笔记十五-(数据块及数据访问方式)

    一.数据块 数据块是在S7 CPU的存储器中定义的,用户可以定义多了数据块,但是CPU对数据块数量及数据总量是有限制的. 数据块与临时数据不同,当逻辑块执行结束或数据块关闭,数据块中的数据是会保留住的 ...

  6. iOS开发—音乐的播放

    iOS开发—音乐的播放 一.简单说明 音乐播放用到一个叫做AVAudioPlayer的类,这个类可以用于播放手机本地的音乐文件. 注意: (1)该类(AVAudioPlayer)只能用于播放本地音频. ...

  7. 教你用Cordova打包Vue项目

    现在国内越来越多的开发者使用Vue开发混合app,但是当大家开发完成过后才发现不知道该怎么将Vue项目打包成app. 据我现在的了解打包Vue项目目前流行的就是使用weex和cordova.weex是 ...

  8. Android基础知识之Manifest文件中的用户权限元素

    原文:http://android.eoe.cn/topic/android_sdk 分任务原文链接一:http://developer.android.com/guide/topics/manife ...

  9. C&plus;&plus;矩阵库 Eigen 快速入门

    最近需要用 C++ 做一些数值计算,之前一直采用Matlab 混合编程的方式处理矩阵运算,非常麻烦,直到发现了 Eigen 库,简直相见恨晚,好用哭了. Eigen 是一个基于C++模板的线性代数库, ...

  10. spring mvc学习笔记(一)web&period;xml文件配置的一点重要信息

    通过这个web.xml文件可以看出,所有的*.shtml的请求,都会被springmvc这个servlet处理.这里如果没有指定contextConfigLocation这个参数,将会按照默认规则在c ...