什么是WebSocket :

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。

WebSocket API也被W3C定为标准。

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 ——摘自百度百科

背景:

很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。

这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。而比较新的技术去做轮询的效果是Comet。

这种技术虽然可以双向通信,但依然需要反复发出请求。而且在Comet中,普遍采用的长链接,也会消耗服务器资源。在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。 ——摘自百度百科

优点:

  • 较少的控制开销。在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。在不包含扩展的情况下,对于服务器到客户端的内容,此头部大小只有2至10字节(和数据包长度有关);对于客户端到服务器的内容,此头部还需要加上额外的4字节的掩码。相对于HTTP请求每次都要携带完整的头部,此项开销显著减少了。
  • 更强的实时性。由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少;即使是和Comet等类似的长轮询比较,其也能在短时间内更多次地传递数据。
  • 保持连接状态。与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。
  • 更好的二进制支持。Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。
  • 可以支持扩展。Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如部分浏览器支持压缩等。
  • 更好的压缩效果。相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率。 ——摘自百度百科

握手协议:

WebSocket 是独立的、创建在 TCP 上的协议。

Websocket 通过HTTP/1.1 协议的101状态码进行握手。为了创建Websocket连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称为“握手”(handshaking)。 ——摘自百度百科

在Vue中使用:

<template><div class="test"></div>
</template><script>export default {name : 'test',data() {return {websock: null,}},created() {this.initWebSocket();},destroyed() {this.websock.close() //离开路由之后断开websocket连接},methods: {initWebSocket(){ //初始化weosocketconst wsuri = "ws://127.0.0.1:8080";this.websock = new WebSocket(wsuri);this.websock.onmessage = this.websocketonmessage;this.websock.onopen = this.websocketonopen;this.websock.onerror = this.websocketonerror;this.websock.onclose = this.websocketclose;},websocketonopen(){ //连接建立之后执行send方法发送数据let actions = {"test":"12345"};this.websocketsend(JSON.stringify(actions));},websocketonerror(){//连接建立失败重连this.initWebSocket();},websocketonmessage(e){ //数据接收const redata = JSON.parse(e.data);},websocketsend(Data){//数据发送this.websock.send(Data);},websocketclose(e){  //关闭console.log('断开连接',e);},},}
</script>
<style lang='less'></style>

如何在Vue中使用websocket?相关推荐

  1. vue 递归创建菜单_如何在Vue中创建类似中等的突出显示菜单

    vue 递归创建菜单 by Taha Shashtari 由Taha Shashtari 如何在Vue中创建类似中等的突出显示菜单 (How to Create a Medium-Like Highl ...

  2. vue全局安装jquery,vue使用bootstrap框架,vue中封装websocket通讯,vue引入element-ui 组件库,引入highcharts图表插件

    vue安装jquery: 1.使用vue-cli创建好vue项目后,在项目文件夹下,使用命令npm install jquery --save-dev 引入jquery. 2.修改项目文件 build ...

  3. 如何在 OpenResty 中使用 websocket

    如何在 OpenResty 中使用 websocket https://hambut.com/2016/10/13/how-to-use-websocket-in-openresty/ 前言 作为一个 ...

  4. 如何在 Vue 中使用 Chart.js - 手把手教你搭可视化数据图表

    本文首发:<如何在 Vue 中使用 Chart.js - 手把手教你搭可视化数据图表> 使用 Chart.js 在 Vue 搭建的后台管理工具里添加炫酷的图表,是所有数据展示类后台必备的功 ...

  5. 如何在 Vue 中导出数据至 Excel 表格 - 卡拉云

    本文首发:<如何在 Vue 中导出数据至 Excel 表格 - 卡拉云> 我们经常需要在 Vue 搭建的后台管理系统里导出数据到 Excel / CSV ,方便我们将数据共享给其他同学或在 ...

  6. 【Web通信】WebSocket详解:WebSocket是什么?如何使用WebSocket?在Vue中封装WebSocket(心跳监测)。nginx配置websocket。

    一.WebSocket相关定义 1. WebSocket定义 WebSocket 是一种基于TCP的全双工通信协议,它提供了一种在浏览器和服务器之间建立持久连接来交换数据的方法.数据可以作为" ...

  7. 骨架屏技术讲解以及如何在Vue中实现骨架屏

    骨架屏技术讲解以及如何在Vue中实现骨架屏 写在前面 骨架屏是什么 如何实现(原理分析) 一个生动的例子 实现方式(具体实现) 方案一.在模版中来实现骨架屏 方案二.使用一个Base64的图片来作为骨 ...

  8. 如何在Vue 中管理 Mixins(搞懂这两点就足够了)

    转载地址:https://segmentfault.com/a/1190000021772893 当我们的Vue项目功能越来越多时,如果有类似的组件,可能会发现自己一次又一次地复制和粘贴相同的数据.方 ...

  9. vue 数组转集合_思想实验:如何在Vue中使localStorage具有响应式?

    响应式是Vue的最大特色之一.如果你不知道幕后情况,它也是最神秘的地方之一.例如,为什么它不能用于对象和数组,而不能用于诸如 localStorage 之类的其他东西? 让我们回答这个问题,在解决这个 ...

最新文章

  1. 多模型融合(相当于投票)
  2. 【两种解法】1004 Counting Leaves (30 分)_27行代码AC
  3. rest风格的get加密字符串怎么接收_RESTful Api的设计与风格,你该学一下咯
  4. golang判断结构体是否实现了某个接口
  5. Tree(树分治入门)
  6. java编译器eclipse_java编译器eclipse
  7. 图片怎么去水印?大神教你3个免费去水印方法
  8. 多重中介效应的示例数据(内附STATA代码)
  9. 金山词霸2009sp3 (解决字典消失、屏幕不能取词问题)
  10. Hadoop Yarn Linux Container Executor配置
  11. leetcode_868_二进制间距
  12. 零知识证明(zero-knowledge proof)
  13. postman批量调用接口操作步骤
  14. 产生任意进制乘法表的程序代码
  15. 农分期 java_农分期现行业务大揭密,8项业务为农户提供全方向服务
  16. 坚强的人:可以承受压力的品质是包容
  17. 什么是期权激励_理解激励股票期权的快速指南
  18. 相机分辨率、图片分辨率、像素及图片尺寸关系的思考
  19. 《redis设计与实现 》15复制-源码部分
  20. TML转义字符:xss攻击与HTML字符的转义和反转义

热门文章

  1. Apache Solr Java 企业级搜索引擎
  2. ElasticSearch 全文检索实战
  3. Android 开发工具集合 - (Android Dev Tools)
  4. java 数组 存储_Java-将数组存储到内存或从内存上传到磁盘
  5. java 文件名乱码_详解关于java文件下载文件名乱码问题解决方案
  6. QT中文乱码的解决方法,一劳永股的解决方法,如下
  7. 记事本如何运行python代码_利用Python开发实现简单的记事本
  8. python调用库有哪些_十大Python机器学习常用库 python开发,你用过几个?
  9. php测试宽带速度慢,性能测试问题排查一例——网络带宽瓶颈
  10. cocos2d-x安装