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

一。引言

初始使用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+WebSocket 实现页面实时刷新长连接

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

  7. Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互

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

  8. 【土旦】Vue+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. cadence学习一------>介绍

    Allegro常用组件: 1.orcad capture cis------>>原理图 2.PCB editor----->>PCB 3.PAD designer------- ...

  2. mac配置变量失败导致ls命令都失效

    1.在命令行中输入 export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin 这样可以保证命令行命令暂时可以使用.命令执行完之后先不要关闭终端 ...

  3. Nginx配置SSL证书部署HTTPS方法

    1.申请域名,绑定服务器ip(我申请的是阿里云服务器,以下就此为例) 2.可以在阿里云上免费申请SSL证书(下载证书,后续会用到) 3.在服务器中配置证书 在服务器上安装Nginx 将下载好的证书上传 ...

  4. jmeter创建时间函数

    固定格式的年月日 ${__time(yyyyMMdd,)} 20151214 //返回年月日 ${__time(HHmmss,)} 092816 //返回时分秒 ${__time(yyyyMMdd-H ...

  5. [JLOI2014]松鼠的新家-树链剖分

    最开始的时候我在写线段树部分的时候还打了一个build,后来一想,打个球球大作战的build啊!!!有个锤子的用啊!!! #include<bits/stdc++.h> using nam ...

  6. MQTT控制---pingreq

    心跳请求 客户端向服务端发送PINGREQ报文用于: 在没有任何其他控制报文从client发给server时,告诉server,client还活着 请求server发送 响应确认它还活着 使用网络以确 ...

  7. 清晰讲解SQL语句中的内连接,通用于Mysql和Oracle,全是干货哦

    本文章目的:力求清晰明了讲解SQL语句的内连接的各种应用,没有深奥的理解! 前奏:这篇文章和下篇文章会将内连接和外连接讲解清楚SQL语句的多表查询常用的有以下几种:两表联合查询(1)内连接(2)外连接 ...

  8. 第一个 Python 程序

    ## 目标 * 第一个 `HelloPython` 程序* `Python 2.x` 与 `3​​.x` 版本简介* 执行 `Python` 程序的三种方式 * 解释器 —— `python` / ` ...

  9. syntax error near unexpected token `do(写的shell脚本出现格式问题)--->1.问题2.展示信息3.解决方案

    1问题:Linux和windows下的回车换行符不兼容的问题 [root@node-01 script]# sh start_zk.sh art_zk.sh: line 3: syntax error ...

  10. 使用JMeter的HTTP代理服务器录制app脚本

    1.添加一个线程组 2.添加一个HTTP代理服务器 3.设置手机网络连接 4.手机安装证书 a.进入jmeter安装目录,在bin目录下找到ApacheJMeterTemporaryRootCA.cr ...