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

一。引言

初始使用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. PostgreSQL学习笔记(一)-安装PostgreSQL

    PostgreSQL官网:https://www.postgresql.org/docs/11/index.html1.如何安装2.如何修改配置文件3.如何设置自动启动4.如何修改数据用户密码 本文环 ...

  2. Tableau 之一 连接数据源

    导入数据源 与各类数据源建立连接关系,是使用tableau探索分析数据的第一步,本节内容包括: 数据源类型 连接数据源 数据源类型 打开tableau,可以在左侧窗口看到连接选项,目前tableau可 ...

  3. Mac安装SecureCRT

    8.3.1版本 链接:https://pan.baidu.com/s/1ohHunH_OVewF4QuRUzmChQ 密码:mc77 下载解压后直接是.app 直接打开会提示文件损害 打开终端,输入如 ...

  4. php递归实现一维数组转为指定树状结构 --- 省市区处理

    ### 这两天脑壳痛,一时短路,想不到准备利用递归实现这个需求,最后还是要请教同事,回来自己在实现了一遍,并记录下来 ### 原数据: // { // 广东省: { // 广州市: [ // &quo ...

  5. 基于用户的协同过滤电影推荐user-CF python

    协同过滤包括基于物品的协同过滤和基于用户的协同过滤,本文基于电影评分数据做基于用户的推荐 主要做三个部分:1.读取数据:2.构建用户与用户的相似度矩阵:3.进行推荐: 查看数据u.data 主要用到前 ...

  6. 规范开发目录 及 webpack多环境打包文件配置

    规范开发目录 普通项目 开发目录: ├── project-name ├── README.md ├── .gitignore ├── assets ├── ├── js ├── ├── css ├─ ...

  7. html如何实现圆角的百度搜索框?

    <form action="http://www.baidu.com/baidu" target="_blank"> <input type= ...

  8. Linux 常用命令介绍

    介绍常用命令,在忘记时便于即使查询 复制.移动.删除     cp.mv.rm.pwd 1. CP 介绍 用法:CP [-adfilprsu]  源文件  目标文件 参数:参数说明: -a:是指arc ...

  9. UMeditor控制多张图片上传顺序

    多张图片上传的顺序,受到用户使用习惯.插件上传和插件插入页面顺序的影响. 估计是考虑到上传性能,官方没有提供UMeditor控制展示顺序的配置.在上传过程中,用户点击拖动的第一张图片,将作为文件数组中 ...

  10. Centos安装Consul微服务

    一.简介 Consul([ˈkɒnsl],康搜)是注册中心,服务提供者.服务消费者等都要注册到Consul中,这样就可以实现服务提供者.服务消费者的隔离.除了Consul之外,还有Eureka.Zoo ...