tcp协议中的长连接和短连接服务器,谈谈HTTP协议中的短轮询、长轮询、长连接和短链接...

undefined

在之前总结 WebSocket 的时候就已经提到过短长轮询了~~今天看公众号文章,又把长短连接引进来一起分析。感觉这种总结很棒,那么我们一起看看呗

长短连接

听说长短连接的话,应该都是这一句吧:HTTP1.0 协议不支持连接,从 HTTP1.1 协议以后,连接默认是长连接。

HTTP 协议是基于请求/响应模式的,因此只要服务端给了响应,本次 HTTP 连接就结束了,或者更准确的说,是本次 HTTP 请求就结束了,根本没有长连接这一说。那么自然也就没有短连接这一说了。

之所以网络上说 HTTP 分为长连接和短连接,其实本质上是说的 TCP 连接。TCP 连接是一个双向的通道,它是可以保持一段时间不关闭的,因此 TCP 连接才有真正的长连接和短连接这一说。

其实知道了以后,会觉得这很好理解。HTTP 协议说到底是应用层的协议,而 TCP 才是真正的传输层协议,只有负责传输的这一层才需要建立连接。

于是,我们就知道了,长连接指的是 TCP 连接,不是 HTTP 连接。理解了这一点之后,我们再来看,把所有的请求都默认为长连接有什么作用。

因为长连接意味着连接被复用,那么这里复用的是 TCP 通道。于是,一个网站上的多个 HTTP 请求可以复用同一个 TCP 连接,这也就是节省了很多 TCP 连接建立和断开的消耗。于是,我们就懂了,为啥 HTTP1.1 要默认长连接,因为短连接几乎没有好处啊~

那么第二个问题:怎么设置长连接呢?

很简单,只要设置 Connection 为 keep-alive。当然是的,但要服务器和客户端(HTTP1.1 默认)都设置。

另外,最后关于长连接还要多提一句,那就是,长连接并不是永久连接的。如果一段时间内(具体的时间长短,是可以在 header 当中进行设置的,也就是所谓的超时时间),这个连接没有 HTTP 请求发出的话,那么这个长连接就会被断掉。

这一点其实很容易理解,否则的话,TCP 连接将会越来越多,直到把服务器的 TCP 连接数量撑爆到上限为止。现在想想,对于服务器来说,服务器里的这些个长连接其实很有数据库连接池的味道,大家都是为了节省连接重复利用嘛,对不对?

长轮询短轮询

这里在我学习 websocket 的时候已经详细说过了~~这里稍微再补充一下自己的理解吧。

轮询:轮-> 循环; 询: 查询;

也就是长短轮询,就是周期短或者周期长的循环查询服务器信息。那么周期怎么算呢?客户端发起的信息那一刻到服务器应答,就算一个周期。

于是长短轮询就能很快区别开来了,长轮询,不停地问服务器拿信息,但是服务器很久才回答你(信息有更新再回答)。短轮询,不停地问服务器拿信息,服务器会马上告诉你情况。

长短轮询和长短连接的区别决定的方式;一个 TCP 连接是否为长连接,通过设置 HTTPde Connection Header 来决定的,而且是要客户端和服务器都设置;轮询的决定权是在于服务器的处理方式,客户端没办法解决

实现方式,连接的长短由协议来规定和实现。而轮询是依赖编程方式手动挂起请求实现的。

这里是来自别人的思路分享文章,因为没有别人的思路历程直接 copy 也是不太好。哪里看不明白,建议直接跳转。

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

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

相关文章

javaMai+Springl实现给QQ邮箱发邮件(带附件,html格式)

以前的时候想着java发邮件很简单,因为当时使用的是outlook实现的,有兴趣的可以去看看之前的两篇博客文章,1.使用java底层实现邮件的发送(含测试,源码) 和 2.使用Spring实现邮件的发送(含测试&…

分析开源项目

手把手教你分析开源项目 不知道代码怎么来的? 代码跑不起来? 项目对自己有帮助,不会模块化分析? 任何一个开源项目,都可以让自己得到提升! 这里以 EL-ADMIN 为例https://el-admin.vip/ 1、观察开源项目…

Hangfire项目实践分享

项目中使用Hangfire已经快一年了,期间经历过很多次的试错及升级优化,才达到现在的稳定效果。趁最近不是太忙,自己在github上做了个案列,也是拿来跟大家分享下,案例是从项目里剥离出来的,有兴趣的可以访问 这…

IDEA开启Run Dashboard窗口

https://www.jianshu.com/p/df201a16d2cc 启动多个端口Run Dashboard窗口显得更好管理,如下: 图片 如果新建的项目运行后不出现Run Dashboard,希望切换成Run Dashboard运行需要进行手动修改。 首先在项目目录下的.idea 文件夹下的workspace…

如何修改服务器mac地址,如何修改服务器mac地址

如何修改服务器mac地址 内容精选换一换更新弹性云服务器的系统或者软件时,可以连接Internet,通过外部Pypi镜像源提供相关服务。但是,如果弹性云服务器无法访问Internet,或者外部Pypi镜像源提供的服务不稳定时,可以使用…

深入Synchronized和java.util.concurrent.locks.Lock的区别详解

转载自 深入Synchronized和java.util.concurrent.locks.Lock的区别详解 本篇文章是对Synchronized和java.util.concurrent.locks.Lock的区别进行了详细的分析介绍,需要的朋友参考下 主要相同点:Lock能完成Synchronized所实现的所有功能。主要不同点&am…

支持断线重连、永久watcher、递归操作并且能跨平台(.NET Core)的ZooKeeper异步客户端

什么是ZooKeeper? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配…

云服务器的购买和宝塔面板的使用

为什么程序员都需要一个自己的服务器 1、作为一个程序员,必须要发布自己的网站和项目 2、练习Linux操作 3、自己的远程仓库、远程数据库、远程tomcat…搭建在服务器上 4、练习,Linux进行任意的环境部署操作 服务器如何购买 尽量打折的时候买 香港服务…

mysql循环insert多条数据

https://blog.csdn.net/ZeroBz/article/details/85119528 DROP PROCEDURE IF EXISTS proc_initData;-- 如果存在此存储过程则删掉 DELIMITER $ CREATE PROCEDURE proc_initData() BEGIN DECLARE i INT DEFAULT 1; WHILE i<15000000 DO INSERT INTO t_…

Java 多线程 —— 深入理解 volatile 的原理以及应用

转载自 Java 多线程 —— 深入理解 volatile 的原理以及应用 推荐阅读&#xff1a;《java 多线程—线程怎么来的》 这一篇主要讲解一下volatile的原理以及应用&#xff0c;想必看完这一篇之后&#xff0c;你会对volatile的应用原理以及使用边界会有更深刻的认知。本篇主要内容…

中间件和微服务,Docker以及原生云架构的关系

IT世界的技术更新非常迅速。一年前我曾写过一篇关于&#xff1a;微服务是否是企业服务总线和其他中间件的死亡魔法。本文章是之前文章的后续以及关于微服务、容器和原生云架构的中间件关系讨论的更新。各种规模的企业正在以令人不可思议的速度快速向这些技术靠拢&#xff01; 在…

Linux基本目录解释

以下是对这些目录的解释&#xff1a; /bin&#xff1a;bin是Binary的缩写, 这个目录存放着最经常使用的命令。/boot&#xff1a; 这里存放的是启动Linux时使用的一些核心文件&#xff0c;包括一些连接文件以及镜像文件。(不要动)/dev &#xff1a; dev是Device(设备)的缩写, 存…

No services have been found解决方案

今天在做web服务的时候遇到了一个问题&#xff0c;很是头疼&#xff0c; No services have been found&#xff0c;就是它&#xff01;&#xff01;&#xff01; 我的解决方案是&#xff0c;在web.xml里面加上&#xff1a; <context-param> <param-name>cont…

linux安装jdk8

https://blog.csdn.net/pdsu161530247/article/details/81582980 linux安装jdk8 最后d轻语 2018-08-11 09:25:21 38205 收藏 83 分类专栏&#xff1a; 软件安装 文章标签&#xff1a; centos6安装jdk linux安装jdk 源码包安装 centos6.4 jdk8 版权 目录 1.下载jdk8 2.源…

Java中的读/写锁

转载自 Java中的读/写锁 原文链接 作者&#xff1a;Jakob Jenkov 译者&#xff1a;微凉 校对&#xff1a;丁一 相比Java中的锁(Locks in Java)里Lock实现&#xff0c;读写锁更复杂一些。假设你的程序中涉及到对一些共享资源的读和写操作&#xff0c;且写操作没有读操作那么频…

.net线程池内幕

本文通过对.NET4.5的ThreadPool源码的分析讲解揭示.NET线程池的内幕&#xff0c;并总结ThreadPool设计的好与不足。 线程池的作用线程池&#xff0c;顾名思义&#xff0c;线程对象池。Task和TPL都有用到线程池&#xff0c;所以了解线程池的内幕有助于你写出更好的程序。由于篇幅…

处理目录的常用命令---Linux

处理目录的常用命令 接下来我们就来看几个常见的处理目录的命令吧&#xff1a; ls: 列出目录cd&#xff1a;切换目录pwd&#xff1a;显示目前的目录mkdir&#xff1a;创建一个新的目录rmdir&#xff1a;删除一个空的目录cp: 复制文件或目录rm: 移除文件或目录mv: 移动文件与目…

com.sun.istack.SAXException2: 在对象图中检测到循环。这将产生无限深的 XML

错误如下所示&#xff1a; javax.xml.ws.soap.SOAPFaultException: Marshalling Error: 在对象图中检测到循环。这将产生无限深的 XML: org.entity.Dept5e54a99b -> org.entity.Emp72433225 -> org.entity.Dept5e54a99b at org.apache.cxf.jaxws.JaxWsClientProxy.i…

Linux下安装nginx (tar解压版安装) nginx1.16.1

https://blog.csdn.net/qq_40431100/article/details/104729504 Linux下安装nginx (tar解压版安装) nginx1.16.1 Jkcc 2020-03-08 16:42:30 2241 收藏 分类专栏&#xff1a; linux 运行环境 文章标签&#xff1a; linux nginx 版权 Linux下安装nginx (tar安装) nginx1.16.…

ASP.NET Core HTTP 管道中的那些事儿

前言 马上2016年就要过去了&#xff0c;时间可是真快啊。 上次写完 Identity 系列之后&#xff0c;反响还不错&#xff0c;所以本来打算写一个 ASP.NET Core 中间件系列的&#xff0c;但是中间遇到了很多事情。首先是 NPOI 的移植工作&#xff0c;移植过后还有一些Bug需要修复&…