vue封装websocket_有关WebSocket必须了解的知识

一、前言

最近之前时间正好在学习java知识,所以自个想找个小项目练练手,由于之前的ssm系统已经跑了也有大半年了,虽然稀烂,但是功能还是勉强做到了,所以这次准备重构ssm系统,改名为postCode系统(至于为什么前者叫ssm,可能是因为后端java用的是ssm框架吧),这次后端将不会开发两套,而是主要实现之前没有实现的单聊功能,由于搭建了多个服务,通信使用的是RabbitMQ,然后把着对消息通信的原理研究写下了这篇水文,后面会单独浅谈一些RabbitMQ。


二、TCP/IP模型

tcp/ip模型算是大学计算机学科中必学的一段知识,但长时间不接触,又都还给老师了。

tcp/ip模型是互联网的基础,它是一些列协议的总称,tcp/ip模型又可以划分为osi七层模型

OSI七层模型TCP/IP概率模型功能TCP/IP协议族应用层应用层文件传输、邮件传输ftp、smtp表示层数据格式化,代码转换,数据加密没有协议会话层接触或者建立于别的接口联系没有协议传输层传输层提供端对端的接口TCP、UDP网络层网络层为数据包选择路由IP、ICMP、RIP、OSPF数据链路层链路层传输有地址的帧以及错误检查功能SLIP、CSLIP、PPP、ARP物理层以二进制数据形式在物理媒介上传输数据IS02110

2.1、UDP的特点

无连接

UDP无需建立三次握手,而是想要发送数据的时候就可以直接送发送端:将收到应用层的数据增加一个UDP的标识就发送出去了接受端:将UDP协议的标识去掉就传输给应用层了

可以单播,多播,广播

UDP支持一对一、一对多、多对多、多对一的传输方式。

不可靠性

通信不需要建立连接,也不需要管对方有没有收到,而是想发就发,这样的连接是不安全的

2.2、TCP的特点

面向连接仅支持单播传输可靠性

TCP提供全双工通信(重点重点)

TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS)


三、Socket编程

在了解WebSocket编程之前要先了解了解Socket

什么是Socket

  • 超详细文档

起初应用层的数据到达传输层后需要依赖tcp/ip协议族建立tcp连接,然后tcp又需要依赖网络层的ip协议等,从而产生了不同数据格式依赖不同协议模型的尴尬局面,导致一些列安全和网络阻塞问题,从而诞生了socket的接口。

socket的诞生是为了应用程序能够更方便的将数据经由传输层来传输socket本质上就是对TCP/IP 的运用进行了一层封装socket并不是协议,而是介于应用层和传输层之间抽象出来的一层,是一组接口socket建立连接和断开连接和普通的tcp连接一样需要进行三次握手和四次挥手socket可以建立长连接和短连接socket主要是应用在C/S(Client/Server)模式里所有的连接都需要经过socket接口

最后可以简单的理解为socket对tcp/ip封装后向应用层提供一些更加方便传输数据的接口。


四、WebSocket

因为socket只能是在C/S架构出现,浏览器端操作都处于应用层,所以Html5中提出了WebSocket通信协议,为了解决真正意义上的全双工通信的难题。

建立WebSocket连接前会先发送一个Header里面有Upgrade:Websocket的http请求ws和wss都属于WebSocket的通信协议,wss和https一样都只是多了TLS协议

不同网络通信协议的对应关系

类WebSocketXMLHttpRequest通信协议wshttp通信协议+TLS协议wsshttps

4.1、ScokJS/Socket.IO

ScokJS

ScokJS是一套基于WebSocket Api封装的js库,它在浏览器和web服务器之间创建了一个低延迟、全双工、跨域通信通道。Spring框架提供了基于SockJS协议的透明的回退选项;Spring Framework也是SockJS推荐Java Server的实现,同时也提供了Java 的client实现SockJS的一大好处在于提供了浏览器兼容性。优先使用原生WebSocket,如果在不支持websocket的浏览器中,会自动降为轮询的方式。因此服务器如果是spring环境,应该优先使用ScokJS

Socket.IO

  • 使用文档
  • 原理文档

Socket.io和ScokJS一样都是基于WebSocket Api封装的js库,同样也是为了解决部分浏览器不支持WebSocket而诞生的js库。Socket.io本身设计就是提供了一套node环境的全双工连接,所有在node环境作为服务器使用Socket.io的时候还需要绑定http.Server服务,因为WebSocket协议是构建在HTTP协议之上的因此服务器如果是node环境,应该优先使用Socket.io

4.2、STOMP/vue-socket

虽然ScokJS和Socket.IO都解决了浏览器兼容性问题,但是在进行双向通信的过程中是不遵循任何消息协议的,也就是当消息到达应用层后就只剩消息文本本身了,所以不利于跨平台和多端通信,于是对应约束消息格式的消息协议的就诞生了。

STOMP

  • 使用文档

STOMP是一种基于帧的协议,帧的结构是效仿HTTP报文格式STOMP可以直接使用WebSocket进行连接,也可以使用SockJS进行连接Stomp.client(url) 通过WebSocket直接连接Stomp.over(ws) 通过sockJS进行连接STOMP更加适合于做于消息组件,其中的方法设计都是可以配合rabbitMQ使用的,只需要在rabbitMQ中安装rabbitmq_web_stomp和 rabbitmq_web_stomp_examples就可以了

vue-socket

vue-socket和STOMP一样都是消息协议,vue-socket底层是基于socket.io封装的js库,对vue支持会更好。

45e6cdfb607ce75ee2bc14212d477bcf.png

来源:博客园

作者:买辣椒也用券

链接:https://www.cnblogs.com/Juaoie/p/13412752.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

list选取多个元素 python_【幼儿园级】0基础学python一本通(上)——AI未来系列1...

在未来面前,每个人都是学生江海升月明,天涯共此时,关注江时!引子本篇为AI未来系列第一篇。为什么要研究学习python?python是未来屠龙的屠龙宝刀,再辅助以我们的高中数学基础(足够用的屠龙术),小…

用polt3画曲面_用SolidWorks建模一个:防滑板曲面造型

防滑板曲面造型2020年4月点底部提取码:eo9z此图用SolidWorks2019版建模,用KeyShot 9.0 渲染(上面两张图) 。SW原文件在今日文件夹里。建模过程1.在上视基准面上画草图。2.曲面拉伸,反向:5 。3.新建基准面,距离上视基准…

lntellijidea怎么创建文件_DBC文件到底是个啥

本文首发自公众号“汽车技术馆”在之前的一篇文章中给大家分享了一些CAN的基本知识,比如CAN通讯是个啥,CAN通讯的机制以及CAN通讯的帧结构等等,相信读过这篇文章的朋友应该都有了一个初步的认识,如果还没有看过的朋友可以在读本文…

at moment的用法 the_值得收藏!初中英语10大词类详解+用法+考点, 这一篇全齐了!...

一、词性的分类词类又叫词性,英语单词根据其在句子中的功用,可以分成十个大类。1.名词 noun n. student 学生2.代词 pronoun pron. you 你3.形容词 adjective adj. happy 高兴的4.副词 adverb adv. quickly 迅速地5.动词 verb v. cut 砍、割6.数词 numer…

属性值动态调整_【VBA】Range对象的常用方法属性(三)

本文继续上一节的Range对象的方法和属性的讲解。上一讲讲到了End属性寻找最后一个已经使用的单元格。这一节继续讲解关于动态找单元格区域方面的属性。Offset 偏移相信学过OFFSET工作表函数的人对这个印象比较深刻,它可是函数中高手必备函数之一。在VBA中&#xff0…

mysql入门到跑路_Mysql入门二十小题(DBA老司机带你删库到跑路)2018.11.26

1、 请介绍数据库管理系统的种类及代表产品RDBMS: mysql oracle mssqlNoSQL: redis mongoab memcache2、 请简述数据库管理系统的作用数据存储,管理数据,备份恢复,安全性,权限管理,3、 请简述RDBMS和NoSQL的特性对比RDBMS:强大的查询功能、强一致性、二级索引、支…

mysql安装包没有安装程序_MySQL5.6的zip包安装教程详解

之前我们都是后缀为.msi的文件,换言之就是傻瓜式安装,但是有些版本不容易控制安装路径,或者数据库编码格式,还有些会安装很多无用的服务,但是都没有后缀为.zip文件简单直接,说是在哪里,就在哪里…

mysql count优化_MySQL count()函数及其优化

很简单,就是为了统计记录数由SELECT返回为了理解这个函数,让我们祭出 employee_tbl 表所有记录统计行的总数计算 Zara 的记录数注意:由于 SQL 查询对大小写不敏感,所以在 WHERE 条件中,无论是写成 ZARA 还是 Zara&…

dz论坛连接mysql数据库_dz论坛搬家后连接数据库等教程

dz搬家后,第一步就是上传源文件到网站根目录和导入数据库然后修改对应的数据库连接配置文件 一共有三个这样修改之后网站就可以访问啦1、config/config_global.php$_config[db][1][dbuser] 数据库用户名;$_config[db][1][dbpw] 数据库密码;$_config[db][1][dbname…

php mysql循环语句怎么写_mysql数据库循环语句该怎么写???

数据库结构num date2 2013-07-245 2013-07-258 2013-08-0310 2013-08-224 2013-09-10最后要在页面中输出为一个行行统计格式7月份 7条记录8月份 18条记录9月份 4条记录要求sql语句只有一句话,有的人会想可以select (count(条件))关键是还要换行的。。有点不会了。回…

ntext在mysql_varchar和text说不清的那些事

数据库定义到char类型的字段时,不知道大家是否会犹豫一下,到底选char、nchar、varchar、nvarchar、text、ntext中哪一种呢?结果很可能是两种,一种是节俭人士的选择:最好是用定长的,感觉比变长能省些空间&am…

字符串转16进制_16、atoi-整数字符串转整数-leetcode8-中等

思路:借助正则表达式。class Solution:def myAtoi(self, s: str) -> int:import repattern re.compile(r^[-]?d) # 生成patterns s.lstrip() #去除左侧空格num_str pattern.findall(s) #找到pattern,返回一个listnum int(*num_str) #用*将list解…

vue移动端通过px动态计算图片宽高_vue图片宽高自适应_移动web图片高度自适应的解决方案...

由于图片的加载是在dom加载完成之后进行的,于是,在手机端浏览网页时,经常会看到页面刚打开时很多内容叠在一起,当图片加载完成后,页面会由于图片加载完成出现明显的抖动针对这个问题,有以下几种解决方案媒体…

mysql日期为00_MySQL 8.0.13 设置日期为0000-00-00 00:00:00时出现的问题

刚开始学习 数据库 操作,今天存数据时发现,保存的时候报错 (Error 1292: Incorrect datetime value: 0000-00-00 for column deleted_at at row 1),之后就搜索了下原因,是因为 MySQL存日期时不允许出现这种格式导致的。下面记录下…

MySQL编程技巧_MySQL学习笔记---MySQL开发技巧

SQL语句分类DDL:数据定义语言 --- CREATE、ALTER、DROP、TRUNCATETPL:事务处理语言 --- COMMIT、ROLLBACK、SAVEPOINT、SET TRANSACTIONDCL:数据控制语言 --- GRANT、REVOKEDML:数据操作语言 --- SELECT、UPDATE、INSERT、DELETEj…

kafka topic 目录存放在哪_Kafka系列文章之安装测试-第2篇

前言上篇文章讲解了 Kafka 的基础概念和架构,了解了基本概念之后,必须得实践一波了,所谓“实践才是检验真理的唯一办法”,后续系列关于 Kafka 的文章都以 kafka_2.11-0.9.0.0 为例;另外为了让大家快速入门,…

mysql的操作语句_Mysql最常用的操作语句收集

Mysql中常用语句简单易学springboot微服务是现在流行的框架,目前大多数做java的人都在使用,java的生态一直很好,各种插件各种第三方jar包推动着java的运行。Mysql是Springboot最常用的数据库,主要原因是Mysql免费而且轻量。考虑性…

stlink 升级固件以后失败_ST-Link不能下载程序的几种解决办法

一直在用J-LINK,最近改用ST-Link,出现了不少无法下载程序的情况,这里列出几种解决的办法(针对STM32F103系列):1#是不是你没有选择Flash算法?什么都没有加的话,会提示“找不到Flash算法”的哦2#是不是你JTAG…

java获取b站动态列表地址_爬虫入门(三)爬取b站搜索页视频分析(动态页面,DBUtils存储)...

这一次终于到了分析b站视频了。开始体会到写博客非常占用学技术的时间,但是还是希望能总结,沉淀下来。工具:使用Webmaigc框架,DBUtils,C3P0连接池。分析过程:b站的搜索页面是这样的。如果浏览器右键查看源代…

python a和b字符串和占位符输出_Python占位符的使用与format函数字符串格式化详解...

Python字符串格式化01字符串的格式化分类字符串的格式化方法共两种:占位符(%)与format方式。占位符方式在Python2比较常见,随着Python3到来,format方式变得广泛起来,format函数常与print()函数结合使用,具备很强的格式…