长连接

Http长连接与短连接

强颜欢笑 提交于 2019-11-27 15:43:05
1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。 IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的。 2. 如何理解HTTP协议是无状态的 HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。 3. 什么是长连接、短连接? 在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。 而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码: Connection :keep-alive

http服务的配置及应用

末鹿安然 提交于 2019-11-27 13:21:02
httpd服务的配置及应用 小尛酒窝 关注 0.6 2018.05.02 22:27* 字数 1696 阅读 13889评论 0喜欢 11 一、httpd服务的配置文件 httpd服务的主配置文件通常为httpd根目录下的conf/httpd.conf文件,通过yum安装的httpd服务的主配置路径通常如下: httpd-2.2:/etc/httpd/conf/httpd.conf httpd-2.4:/etc/httpd/conf/httpd.conf 主配置文件的格式大体分为三部分: Section 1: Global Environment Section 2: 'Main' server configuration Section 3: Virtual Hosts 但httpd-2.4版本中删除了相应的描述,不过大体与httpd-2.2相同。 另外除了主配置文件之外,也存在着其他的配置目录路径,通常在主配置文件中会使用 Include conf.d/*.conf 、 Include conf.modules.d/*.conf (httpd-2.4)类似的语句去调用对应的目录下的配置文件,其路径格式为相对路径,根目录由主配置文件中的Serverroot决定。 本文案例基于 Centos 7.4 httpd-2.4。 二、httpd服务的基础配置 1、修改监听的IP地址和接口

压测引起的 nginx报错 502 no live upstreams while connecting to upstream解决

我与影子孤独终老i 提交于 2019-11-27 11:14:47
对系统的某个接口进行极限压测,随着并发量上升,nginx开始出现502 no live upstreams while connecting to upstream的报错,维持最大并发量一段时间,发现调用接口一直返回502,即nginx已经发现不了存活的后端了。 通过跟踪端口,发现nginx 跟后端创建了大量的连接。这很明显是没有使用http1.1长连接导致的。因此在upstream中添加keepalive配置。 upstream yyy.xxx.web{ server 36.10.xx.107:9001; server 36.10.xx.108:9001; keepalive 256; } server { ··· location /zzz/ { proxy_pass http://yyy.xxx.web; ··· } } 根据官方文档的说明:该参数开启与上游服务器之间的连接池,其数值为每个nginx worker可以保持的最大连接数,默认不设置,即nginx作为客户端时keepalive未生效。 默认情况下 Nginx 访问后端都是用的短连接(HTTP1.0),一个请求来了,Nginx 新开一个端口和后端建立连接,请求结束连接回收。如果配置了http 1.1长连接,那么Nginx会以长连接保持后端的连接,如果并发请求超过了 keepalive 指定的最大连接数,Nginx

什么是短连接、长连接、Socket(基础知识扫盲)

旧街凉风 提交于 2019-11-27 04:39:16
socket Socket协议的形象描述   socket的英文原义是“孔”或“插座”。在这里作为4BDS UNIX的进程通信机制,取后一种意思。socket非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。 详细内容见 百科 。 通常短连接是这样:连接->传输数据->关闭连接 那什么是长连接?一般长连接相对短连接而言的,长连接在传输完数后不关闭连接,而不断的发送包保持连接等待处理下一个数据包。 such as: 连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。 那什么时候用短连接呢?

HTTP详解总结

孤人 提交于 2019-11-27 01:24:30
文章主要以一次HTTP请求的整个过程来讲解:HTTP起源、TCP/IP协议、建立TCP连接、客户端请求、服务端响应、断开TCP连接。 一、HTTP协议的演进 Http(HyperText Transfer Protocol)协议是基于TCP的应用层协议,它不关心数据传输的细节,主要用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面内容。 默认端口是80 。 1.HTTP 0.9版本 1991年 这个版本最初用来向客户端传输HTML页面的,所以只有一个GET命令,服务器返回客户端一个HTML页面,不能是其它格式。利用这个版本完全可以构建一个简单的静态网站了。 2.HTTP 1.0版本 1996年 1.0版本改变是比较大的,奠定了现在HTTP协议的基础,这个版本的协议不仅可以传输HTML的文本页面,还可以传输其它二进制文件,例如图片、视频。而且还增加了现在常用的POST和HEAD命令,请求消息和响应消息也不是单一的,规定了一些元数据字段,例如:字符集、编码、状态码等 3.HTTP 1.1版本 1997年 实际上是在1.0版本之后半年时间又发布了一个版本,这个版本在1.0版本的基础上更加完善了。这个版本增加了持久连接,就是说之前版本的协议一次请求就是一次TCP连接,请求完成后这个连接就关闭掉了。众所周知TCP协议是可靠的,建立连接需要3次握手,断开连接需要4次挥手

基于springboot的websocket聊天室

倖福魔咒の 提交于 2019-11-26 23:49:00
WebSocket入门 1.概述 1.1 Http #http简介 HTTP是一个应用层协议,无状态的,端口号为80。主要的版本有1.0/1.1/2.0. #http1.0/1.1/2.0 1.HTTP/1.* 一次请求-响应,建立一个连接,用完关闭; 2.HTTP/1.1 串行化单线程处理,可以同时在同一个tcp链接上发送多个请求,但是只有响应是有顺序的,只有上一个请求完成后,下一个才能响应。一旦有任务处理超时等,后续任务只能被阻塞(线头阻塞); 3.HTTP/2 并行执行。某任务耗时严重,不会影响到任务正常执行 1.2 WebSocket #WebSocket简介 Websocket是html5提出的一个协议规范,是为解决客户端与服务端实时通信。本质上是一个基于tcp,先通过HTTP/HTTPS协议发起一条特殊的http请求进行握手后创建一个用于交换数据的TCP连接.WebSocket同HTTP一样也是应用层的协议,但是它是一种双向通信协议。 #WebSocket连接过程 1. 浏览器、服务器建立TCP连接,三次握手。这是通信的基础,传输控制层,若失败后续都不执行。 2. TCP连接成功后,浏览器通过HTTP协议向服务器传送WebSocket支持的版本号等信息。(开始前的HTTP握手) 3. 服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据。 4.

Connection: Keep-Alive

雨燕双飞 提交于 2019-11-26 19:31:28
上午在实验室看书,师弟让我帮忙解决个项目上的问题,问题不难,于是我教他抓包解决,让他电脑下了fiddler不过却显示不出来请求,我尝试了一下也是如此,过滤器也没开,突然意识到可能是360的问题,因为fiddler是通过http代理的方式,360很可能阻止第三方软件对浏览器代理,于是关掉360,重启浏览器终于能愉快的抓包了。 调试过程中我让他F12勾上disable cache,然后眼睛被一个词语吸引住了---Connection: Keep-Alive 当时很疑惑,http明明是无连接无状态的,那么这里的keepalive是指什么? 实际上它是一种TCP复用,每次http请求都需要tcp三次握手,浪费资源和时间,因此我们可以保持tcp通道连接一段时间,这样一次tcp连接就可以维持几次http请求。 在此基础上,还需要搞清楚几个其他的名词:长轮询,段轮询 长连接是为了tcp复用,那么这两个词是做什么的呢?先说个例子: 短轮询相信大家都不难理解,比如你现在要做一个电商中商品详情的页面,这个详情界面中有一个字段是库存量(相信这个大家都不陌生,随便打开淘宝或者京东都能找到这种页面)。而这个库存量需要实时的变化,保持和服务器里实际的库存一致,怎么实现? 长轮询这个时候就出现了,其实长轮询和短轮询最大的区别是,短轮询去服务端查询的时候,不管库存量有没有变化,服务器就立即返回结果了

网络基础知识点辩解

帅比萌擦擦* 提交于 2019-11-26 14:53:31
在浏览器里面输入url地址-->显示主页的过程 (1)DNS的解析 (2)TCP的连接 (3)发送HTTP请求 (4)服务器处理请求并返回HTTP报文 (5)浏览器解析渲染页面 (6)连接结束 状态码: (1)1**:请求正在处理 (2)2**:请求正常处理完毕 (3)3**:需要附加操作以完成请求 (4)4**:服务器无法处理请求 (5)5**:服务器处理请求错误 HTTP长连接和短连接 短链接: HTTP1.0默认的连接方式,客户端和服务端每进行一次HTTP操作都要建立一次连接 长连接: HTTP1.1默认的连接方式,客户端和服务器端之间用于传输的HTTP数据的TCP连接不会关闭,并且会有一个设定好的时间值去关闭(附:需要在响应头加上:Connection:keep-alive) HTTP1.0和HTTP1.1的区别 (1) HTTP1.0默认使用短连接,而HTTP默认使用长连接 (2) HTTP1.1新增了24个错误状态响应码,如409(冲突),410(已删除) (3) HTTP完善了缓存处理机制 (4) HTTP1.0中存在带宽浪费的现象,如请求一部分资源,服务器把全部资源传输过来;HTTP1.1就不会这样子,完善了资源的利用率。 URI和URL的区别 (1) URI是资源标志符,唯一标识一个资源 (2) URL是资源定位符,提供该资源的路径,是具体的URI,不仅标识资源

高性能MySQL之基础架构

久未见 提交于 2019-11-26 14:49:22
一、背景 为什么我们需要先学习MYSQL的基础架构先呢? 原因很简单,当我们需要了解一件事物的时候,我们只有站在宏观的层面,才能层层剥丝抽茧的去理解问题。举个例子,我们要看一个框架的源码,一开始就想进去研究,却发现找不着北,原因很简单,因为我们没有鸟瞰全貌,我们根本不知道入口在哪里。因此我们学习MYSQL的时候也是这样。先从高纬度理解问题,最后看到里面有哪些组件,一层层的拆解,这样让我们对mysql有更深入的理解。废话不多说,我们先看总体的逻辑架构图,如下所示。 二、Mysql总体逻辑架构 从图中不难看出,不同的存储引擎共用一个Server层,也就是从连接器到执行器的部分。可以看到Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如触发器、视图等。 需要主意的是存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。现在最常用的存储引擎是InnoDB,它从MySQL 5.5.5版本开始成为了默认存储引擎。这也说明了你create table建表的时候,如果不指定引擎类型,默认使用的就是InnoDB。当然你也可以指定存储引擎,例如create table语句中使用engine=memory

Asible学习笔记--优化ansible速度

强颜欢笑 提交于 2019-11-25 23:37:24
优化ansible速度 简单介绍和说明下,优化ansible执行速度的方法,具体如下~ 常规优化方法 ansible的-t选项妙用 ansible的"-t"或"--tree"选项是将ansible的执行结果按主机名保存在指定目录下的文件中。 ansible test -m ping -o -f 6 -t /tmp/tree 至于保存的内容为何?实际上仅仅只是保存了普通的输出内容而已。 # pwd /tmp/tree # cat 192.168.246.187 {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"} 设置ansible开启ssh长连接 如要开启ssh长连接,要求ansible端的openssh版本高于或等于5.6。使用 ssh -V 可以查看版本号。然后设置ansible 使用ssh连接被控端的连接参数,此处修改 /et c/ans ible/ansible.cfg ,在此文件中启动下面的连接选项,其中 ControlPersist=5d 是控制ssh连接会话保持时长为5天。 ssh_args = -C -o ControlMaster=auto -o ControlPersist=5d 除此之外直接设置 /etc