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…

scaling之旅_机器学习算法之旅 - lwaif的个人空间 - OSCHINA - 中文开源技术交流社区...

机器学习领域有很多算法,然后每种算法又有很多延伸,所以对于一个特定问题,如何确定一个正确的算法是很困难的。本文中我想给你们两种方法来归纳在现实中会遇到的算法。学习方式根据如何处理经验、环境或者任何我们称之为输入的数据&#xff0…

maven工程打包老是报错_maven工程pom文件老是报错

本人mac端,从svn上下载了一个maven工程在eclipse上使用maven install 时候老是失败本地仓库已经指定好,但是还是显示无法获取指定的jar包信息如下[INFO] Scanning for projects...[INFO][INFO] ------------------------------------------------------------------------[INFO…

python 整数逆位运算_Python 进制转换、位运算

一、进制转换编程用十进制,十进制转换为二进制、八进制、十六进制In [135]: bin(23)Out[135]: 0b10111In [136]: oct(23)Out[136]: 0o27In [137]: hex(23)Out[137]: 0x17也可以直接反向获取十进制In [146]: 0b10111Out[146]: 23In [147]: 0o27Out[147]: 23In [148]:…

python高频词_python几万条微博高频词分析

python几万条微博高频词分析看到别人有做影视热评的分析统计,觉得挺好玩的,就来试试看看效果Screenshot_2018-05-21-11-00-42-879_com.master.wei.png思路抓取想要的微博数据写入数据库分词统计出词汇出现次数过滤无意义的干扰词存入数据库写接口&#x…

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

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

git 新建分支并切换到该分支_git切换到指定分支,git新建分支与合并

一,git切换到指定分支使用git进行开发的时候经常会遇到需要切换远程分支并且提交到远程指定分支的情况,操作如下1,查看远程所有分支git branch -agit branch不带参数,列出本地已经存在的分支,并且在当前分支的前面用*标记&#xf…

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

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

mysql用户如何迁移_迁移MySQL用户及权限

导出[rootdb01 tmp]# mysql -B -N -uroot -p -e "SELECT CONCAT(\, user,\\, host, \) FROM user WHERE user ! debian-sys-maint AND user ! root AND user ! " mysql > /tmp/mysql_all_users.txt[rootdb01 tmp]# cat /tmp/mysql_all_users.txt[rootdb01 tmp]# c…

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

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

mysql not in 多列,MySQL中的多列外键?

I have a table that has a primary key consisting of two columns (product_id, attribute_id). I have another table that needs to reference this table. How can I make a foreign key in the other table to link it to a row in the table with two primary keys?解决…

导入mysql source_mysql导入source数据库

首先要确保数据库存在,如果不存在则创建方法1 source很智能,很方便,很快捷。# mysql -uroot -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 54467Server version: 5.6.36-log Sour…

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…

mysql创建表时默认默认_mysql创建数据表时指定默认值教程

指定默认值如果在插入行时没有给出值,MySQL允许指定此时使用的默认值。默认值用 CREATE TABLE 语句的列定义中的 DEFAULT 关键字指定。请看下面的例子:输入:create table orderitems(order_num int NOT NULL,order_item int NOT NULL,prod_id…

csv mysql 导入 mac_将sqlserver导出的csv数据导入到ubuntu和mac上的mysql

最近在捣鼓一些数据相关的东西。将sql server里的数据导入到ubuntu和mac上的mysql,方法有很多。不过我选择了最简单的一种:将sql server的数据导成csv,然后将csv导入到mysql。想法挺好,坑挺多。sql server是windows的,…

2012 安装mysql 5.6_如何安装mysql server 5.6

匿名用户1级2016-02-22 回答有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。1. check table 和 repair table登陆mysql 终端…