WebSocket是什么原理为什么可以实现持久连接(websocket 保持连接不断)

WebSocket 实战 研读 WebSocket 的优势 为什么要用WebSocket 未完编辑中...

这篇文章给大家聊聊关于WebSocket是什么原理为什么可以实现持久连接,以及websocket大文件不建议对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

本文目录

  1. WebSocket是什么原理为什么可以实现持久连接
  2. mosquitto参数怎么配置
  3. wsv格式是什么意思

WebSocket是什么原理为什么可以实现持久连接

首先需要明白:基于TCP的应用层协议,只要设计者愿意,都是可以实现持久连接的。

你问的方式,大概是在和HTTP做比较。

HTTP

http协议是请求应答式的文本协议,协议设计就是Client-Server模式,出发点是服务端为客户端提供资源。http服务端只能监听和响应来自客户端的请求,http客户端只能发起请求接受响应,这个是HTTP协议本身的设计,双向通信不在设计的考虑之内。

关于Http协议,额外说点:

HTTP1.0/0.9

不支持keep-alive,要完成一次HTTP请求,需要建立一个新的TCP连接,然后发送http请求,待接收响应后关闭连接。

HTTP1.1

默认使用keep-alive,一次HTTP请求完成后不会关闭TCP连接,会继续为下一个HTTP请求服务(可以类比数据库连接池和线程池的设计),减小建立和关闭TCP连接的开销(三次握手四次挥手)。当然闲置超时后也会关闭。并非楼下所说的“把多个HTTP请求合并为一个”。

HTTP协议的设计无法实现对TCP通道的分用和复用。因为HTTP协议没有请求的唯一标记(仅仅是URL是不行的,原因大家想)用来从同一TCP通道分离不同的HTTP消息,所以一个完整的HTTP请求在发送请求到响应回来之间是独占一个TCP通道的!是不是觉得HTTP对TCP的利用率太低了?而关于pipeline模式,不管在服务端还是客户端排队,HTTP响应依然要通过进入服务端队列的顺序返回,这样才能和客户端HTTP请求队列用顺序做对应!所以pipeline模式某个请求被服务端因为某些原因阻塞了的情况下,后续请求都会阻塞,会引起很大的问题,实际上很少用。

浏览器或者一般HTTP客户端组件为某一个服务器端点(域名+端口)保留4-6条活跃TCP连接。你可以F12观察浏览器,看看同时是几个请求阻塞了就知道你的浏览器设置的多少。比较大的门户网站,比如京东,首页请求非常多,但是大量都需要排队等TCP空闲。限制客户端的连接数量的出发点主要是性能,否则会占用服务器太多Socket资源(考虑socket预留的读写缓冲区,windows的内核对象或者linux的文件句柄)或者变相地造成DoS攻击。

Tips:HTTP客户端组件一般会提供诸如ConnectionLimit的选项让你控制最大TCP连接数。如果你是桌面客户端,或者请求远程服务,不宜设置过大。如果你是内部服务之间调用,可以根据需求合理设置以增加并发性能。

HTTP2.0

针对以上的问题(主要是性能)做了很多改进,这个也会提高很多人在后端不同服务器之间做通信时选择HTTP(我在HTTP2.0出来之前就是自己设计RPC方案)。详细的HTTP2.0的东西,这里不展开了,详细参考官方文档。

HTTP相关知识推荐《HTTP权威指南》以及相关的RFC文档,尽量少去看博客上面支离破碎的小知识,体系化的认知结构对你帮助更大。

WebSocket

WebSocket的出现,就是为了解决http协议不支持双向通信的缺口。所以WebSocket的握手协议就是使用的HTTP消息来Upgrade。

现代的Web场景,服务端推送的需求非常大,这个发展过程中使用的Ajax轮询,Comet等都只是临时解决方案,从设计上看,只为满足需求,一点都不优雅。

Html5规范将WebSocket纳入后,得到了现代几乎所有浏览器的支持,当然IE(10+才支持)仍然是一个巨坑,在乎用户覆盖面的产品依然要通过浏览器是否支持ws来做出降级处理(轮询、长连接)。

websocket协议实现独占一条tcp通道,它负责从tcp流确定消息边界,解析出每个独立的消息包。可进行全双工的双向通信。题主所谓的WebSocket可以实现持久连接,只是的一个服务端WebSocket会话和对应的客户端WebSocket会话在使用一个固定的保持连接的TCP通信而已。一般需要将服务端WebSocket会话和某位用户关联起来(客户单连接后,可以再单独发送凭证验证),实现给某个用户推送消息,只需根据关联找到对应的WebSocket会话调用发送API即可。

应用

使用单独实现websocket协议的服务\客户端组件,可以更加轻松地实现自定义协议:在websocket的二进制或者文本消息体内或者直接使用websocket的自协议定义机制封装自己定义的协议。

推荐大家如果有些需要自建IM服务器,推送服务器的场合尝试先用WebSocket来实现。负载高(协议头消耗小),协议简洁,几乎所有客户端(减少了大量的工作)都有对应的开源项目可用,同时还是唯一可以在浏览器上用的双向通信协议(flash和silverlight等插件方式除外)。

如果你要用websocket实现请求应答式的子协议,要点是你要设计唯一的请求标志,响应也将请求标志带回来,然后你就可以从客户端的请求队列中查找响应对应的请求将响应交给上层处理!

特别注意:

关于webcket持久连接,本质上是下层tcp连接的保持,核心问题同样是如何保活。需要考虑Nat失效(基站最突出,一般有效期只有3分钟)或者其它网络原因导致大量半连接存在。解决方案就是合理的心跳时间,一般我设置为2分50秒的样子。

其它

不论是否从事网络编程,都应该花时间学习下TCP/IP协议簇方面的知识,着重理解分层原理,各层的功能和为上层提供了哪些功能。就像这个问题,如果不对TCP有所了解,回答的内容就没多大意义了。阅读一个你比较熟悉的语言的的一种协议(比如http)实现项目的源码,帮助应该很大。

和网络IO密切相关的就是线程,要设计高可用的TCP服务器,必须要熟悉多线程。网络IO和多线程是我认为最重要的两个核心知识点。

关于协议的设计,你可以多学习其他优秀的基于TCP实现的应用层协议,简单的就有Redis的通信协议,里面有阻塞式的消费者队列,那个就需要一条单独的tcp通道。协议设计是很有意思的一件事情,就是mysql和mongodb的通信协议我也不会放过,去看看,会给自己设计协议带来不少的参考价值。

如果时间允许,有标准的协议最好看看RFC文档,现在Chrome的翻译已经很好了,如果英文不太好,问题也不大。

关于TCP/IP相关的书籍

《计算机网络:自顶向下方法》和谢希仁的《计算机网络》都是不错的入门书籍。

《TCP/IP详解》是经典,虽然出版已久,内容是没过时的。

网络应用脱离不了操作系统,所以可以再看看操作系统关于网络IO这一块的设计。

实际开发更多和Socket以及多线程打交道,Windows下面可以看看《Windows核心编程》。

其它的就是开源项目:Nginx,netty等大量优秀的项目都在等你。

还是要感谢大家对我写的东西有那么一点感兴趣,能对大家有所帮助就更好了。

mosquitto参数怎么配置

1、查看CentOS版本

cat/etc/redhat-release

返回:CentOSLinuxrelease7.4.1708(Core),如果系统不是最新版本,执行yumupdate更新

2、通过yuminstallmosquitto安装mosquitto

配置文件在/etc/mosquitto下

3、去腾讯云或者阿里云申请免费的域名证书,下载证书到服务器,解压到/etc/mosquitto/cert下

4、配置mosquitto

mv/etc/mosquitto/mosquitto,conf/etc/mosquitto/mosquitto.conf.bak

把下面的内容复制到/etc/mosquitto/mosquitto.conf

5、启动服务端

mosquitto-c/etc/mosquitto/mosquitto.conf-d

-d后台运行

-c指定配置文件路径

6、测试tlswebsocket连接

hivemq有个在线的测试工具,我们用他们的,

http://www.hivemq.com/demos/websocket-client/

host填写:

http://www.mengmeitong.com

port填写:8883

选中SSL复选框,然后点击Connect按钮,能连接成功,就表示配置正确。

wsv格式是什么意思

wsv格式是一种表格文件的格式。wsv是"WhitespaceSeparatedValues"的缩写,指的是以空格为分隔符的表格文件格式。和csv格式不同,wsv格式使用空格代替了逗号作为分隔符。使用wsv格式的优点是,可以使用tab键进行分隔,避免了一些其他特殊字符的冲突。另外,wsv格式的文件可以直接在文本编辑器中查看与编辑,也可以使用Excel等表格软件打开。

WebSocket是什么原理为什么可以实现持久连接和websocket大文件不建议的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

聊聊OkHttp实现WebSocket细节,包括鉴权和长连接保活及其原理

声明:本文内容来自互联网不代表本站观点,转载请注明出处:https://bk.77788889.com/12/107876.html

相关推荐

  • aud是什么币种(audusd是什么货币)

    关于AUD的常见问题 AUD的基本介绍 AUD是澳大利亚元的简称,是澳大利亚的法定货币。AUD代码为AUD,1AUD等于100分。AUD在澳大利亚国内被广泛使用,但在国际上,AUD......

    编辑:匿名
    时间:2023-12-05
  • a是什么元素(pb是什么元素)

    标题:a是什么元素 副标题:探索a元素的本质与特点 a元素的本质 a元素是一种化学元素,它的原子序数为1,属于原子序数较小的元素。a元素在周期表中的位置是第1周......

    编辑:励志句子
    时间:2023-12-05
  • cf卡是什么(CF卡是什么)

    CF卡是什么? CF卡是一种用于存储计算机数据的特殊 type-1 固态硬盘(SSD)。它是由一种称为 flash memory 的技术构成的,可以在非常短的时间内存储大量的数据。CF卡......

    编辑:匿名
    时间:2023-12-05
    标签:#是什么#cf
  • ehs方针是什么(ehs方针的七个要素)

    ehs方针是什么? ehs方针是指环境健康和安全方针的缩写,是一种关注人类和环境健康与安全的管理体系。 在企业中,ehs方针是企业为了保护员工和环境而制定的一系列政......

    编辑:佚名
    时间:2023-12-05
  • gt是什么鱼(GT是什么鱼)

    【GT是什么鱼?】 GT是什么鱼? GT是一种非常受欢迎的淡水鱼,也被称为"奇特鱼"或"魔法鱼"。它原产于南美洲,目前在全球范围内都有人工养殖。这种鱼有着独特的外......

    编辑:匿名
    时间:2023-12-05
    标签:#是什么#gt
  • Mac是什么国家(mac是什么国家的简写)

    Mac是什么国家? Mac 是一款由苹果公司生产的计算机操作系统,其总部位于美国加利福尼亚州库比蒂诺市。Mac 操作系统的特点包括稳定性、安全性、图形化用户界面和应......

    编辑:互联网
    时间:2023-12-05
  • one是什么软件(winclone是什么软件)

    One是一个广受欢迎的软件,那么它究竟是什么呢?下面我们通过一篇百度经验的文章来了解一下。 One是一个轻量级笔记软件,主要特点是简单易用,高度可定制。它可以在多......

    编辑:投稿
    时间:2023-12-05
  • ton是什么单位(tog单位)

    标题:ton是什么单位? 副标题:ton是重量的基本单位 1. ton是什么? ton是一种重量单位,通常用于衡量物体的重量。它的定义是: 在一个标准大气压下,1 ton的重......

    编辑:励志名言
    时间:2023-12-05
  • z开头是什么火车(z开头是什么火车- 本地宝)

    火车标题:Z字头列车:探索神秘的中国高速列车之旅 副标题1:贴身战士——舒适与安全的完美结合Z字头列车,作为我国高速列车技术的代表,一直以来都以高速、舒适......

    编辑:投稿
    时间:2023-12-05
  • 二战的转折点是什么(中国二战的转折点是什么)

    二战的转折点:斯大林格勒保卫战 一、斯大林格勒保卫战背景 1. 意义:斯大林格勒保卫战是二战中的一个重要转折点,也是苏联在二战中取得重要胜利的关键之战。 2.......

    编辑:励志文章
    时间:2023-12-04
  • 兵团精神是什么(兵团精神是什么时期)

    【标题】兵团精神是什么? 【副标题】弘扬兵团精神,为实现新疆长足发展提供强大精神动力 【正文】 一、兵团精神定义 兵团精神是指在新疆生产建设兵团(以下简称......

    编辑:励志名言
    时间:2023-12-04
  • 卫星电话是什么(卫星电话是什么电话)

    卫星电话是什么? 卫星电话是一种便携式电话设备,使用卫星信号进行通话。它的主要特点是其便携性和通话质量。 卫星电话的使用非常方便。因为它不需要任何网络连接......

    编辑:互联网
    时间:2023-12-03