alive

Tomcat 是如何实现keep-alive

自古美人都是妖i 提交于 2020-01-12 08:48:55
http无状态,又是基于tcp,所以每次请求都要握手分手,在频繁的请求来说,很是浪费,且没有必要。 于是就有了大家都知道的keep-alive。关于keep-alive的概念,网上一大堆,我就不重复了,盗一张图,描述一下: keep-alive主要靠服务器实现,那么问题来了,作为java程序的主流服务容器,tomcat 是如何实现keep-alive的呢? 先看tomcat,以主流的nio实现为例 在NioEndpoint.SocketProcessor#doRun的方法中会处理三次握手: if (handshake == 0) { log.info("开启三次握手验证"); SocketState state = SocketState.OPEN; // Process the request from this socket if (event == null) { log.info("state = getHandler().process(socketWrapper, SocketEvent.OPEN_READ);"); state = getHandler().process(socketWrapper, SocketEvent.OPEN_READ); } else { log.info("state = getHandler().process

HTTP的长连接和短连接

可紊 提交于 2020-01-08 10:23:46
一、长、短连接简介及应用    HTTP协议采用“ 请求-应答 ”模式。   1、当使用 普通模式(HTTP multiple connection,也称为短连接) ,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议)。   2、当使用 Keep-Alive模式(HTTP persistent connection ,又称持久连接、连接重用) 时,Keep-Alive功能使客户端到服务器端的连接持续有效,后续对服务器进行数据请求时 仍然会保持TCP连接不断开 (不会再发RST包、不会再进行四次握手),等待在同域名下继续用这个通道传输数据, 避免了重新建立连接,这样更高效,性能更高。     http 1.0中 Keep-Alive 功能默认是关闭的,需要在http头加入"Connection: Keep-Alive",才能启用Keep-Alive;http 1.1中默认启用Keep-Alive,如果加入"Connection: close ",才关闭。目前大部分浏览器都是用http1.1协议,也就是说默认都会发起Keep-Alive的连接请求了,所以是否能完成一个完整的Keep-Alive连接就看服务器设置情况。   HTTP首部的 Connection: Keep-alive 是 HTTP1.0

HTTP 的长连接和短连接

拥有回忆 提交于 2020-01-08 06:55:19
一、什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。 HTTP首部的Connection: Keep-alive是HTTP1.0浏览器和服务器的实验性扩展,当前的HTTP1.1 RFC2616文档没有对它做说明,因为它所需要的功能已经默认开启,无须带着它,但是实践中可以发现,浏览器的报文请求都会带上它。如果HTTP1.1版本的HTTP请求报文不希望使用长连接,则要在HTTP请求报文首部加上Connection: close。《HTTP权威指南》提到,有部分古老的HTTP1.0 代理不理解Keep-alive,而导致长连接失效:客户端–>代理–>服务端,客户端带有Keep-alive,而代理不认识,于是将报文原封不动转给了服务端,服务端响应了Keep-alive,也被代理转发给了客户端,于是保持了“客户端–>代理”连接和“代理–>服务端”连接不关闭,但是,当客户端第发送第二次请求时,代理会认为当前连接不会有请求了,于是忽略了它,长连接失效。书上也介绍了解决方案:当发现HTTP版本为1.0时,就忽略Keep-alive,客户端就知道当前不该使用长连接。其实,在实际使用中不需要考虑这么多

HTTP长连接短连接

南楼画角 提交于 2020-01-08 04:47:38
一、什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。  HTTP首部的Connection: Keep-alive是HTTP1.0浏览器和服务器的实验性扩展,当前的HTTP1.1 RFC2616文档没有对它做说明,因为它所需要的功能已经默认开启,无须带着它,但是实践中可以发现,浏览器的报文请求都会带上它。如果HTTP1.1版本的HTTP请求报文不希望使用长连接,则要在HTTP请求报文首部加上Connection: close。《HTTP权威指南》提到,有部分古老的HTTP1.0 代理不理解Keep-alive,而导致长连接失效:客户端-->代理-->服务端,客户端带有Keep-alive,而代理不认识,于是将报文原封不动转给了服务端,服务端响应了Keep-alive,也被代理转发给了客户端,于是保持了“客户端-->代理”连接和“代理-->服务端”连接不关闭,但是,当客户端第发送第二次请求时,代理会认为当前连接不会有请求了,于是忽略了它,长连接失效。书上也介绍了解决方案:当发现HTTP版本为1.0时,就忽略Keep-alive,客户端就知道当前不该使用长连接。其实

keep-alive遇见vue-router

依然范特西╮ 提交于 2020-01-06 21:38:52
保证组件活着 keep-alive是vue内置的一个组件,可以使被包含的组件保留状态,避免组件重新渲染,频繁创建销毁,router-view也是一个组件,如果直接被包在keep-alive里面,所有路径匹配到的视图组件都会被缓存 keep-alive有两个非常重要的属性 include -- 字符串或正则表达,只有匹配的组件才会被缓存 exclude --字符串或正则表达,任何匹配的组件都不会被缓存 <keep-alive exclude="profile,user"> <route-view/> </keep-alive> 这两个函数只有组件使用了keep-alive时才有效 activated(){ console.log("当前组件活跃") } deactivated(){ console.log("当前组件不活跃") } 来源: 51CTO 作者: 喝醉的熊 链接: https://blog.51cto.com/13550695/2464461

【学习】014 深入理解Http协议

我的梦境 提交于 2019-12-28 09:02:51
Http协议入门 什么是http协议 http协议: 对浏览器客户端 和 服务器端 之间数据传输的格式规范 查看http协议的工具 1)使用火狐的firebug插件(右键->firebug->网络) 2)使用谷歌的“审查元素” http协议内容 请求(浏览器-》服务器) GET /day09/hello HTTP/1.1 Host: localhost:8080 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive 响应(服务器-》浏览器) HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Length: 24 Date: Fri, 30 Jan 2015 01:54:57 GMT this is hello servlet!!! Http请求 GET /day09

Vue / keep-alive使用

谁都会走 提交于 2019-12-26 04:19:47
keep-alive keep-alive是Vue提供的一个抽象组件,用来对组件进行缓存,从而节省性能,由于是一个抽象组件,所以在v页面渲染完毕后不会被渲染成一个DOM元素 <keep-alive> <loading></loading> </keep-laive> keep-alive生命周期钩子函数:activated、deactivated 当组件在keep-alive内被切换时组件的activated、deactivated这两个生命周期钩子函数会被执行 使用 <keep-alive> 会将数据保留在内存中,如果要在每次进入页面的时候获取最新的数据,需要在 activated 阶段获取数据,承担原来created钩子中获取数据的任务。 activated() { this.onQueryClick(1);//获取最新数据 } prop: include: 字符串或正则表达式。只有匹配的组件会被缓存。 exclude: 字符串或正则表达式。任何匹配的组件都不会被缓存。 1.利用include、exclude属性 <keep-alive include="bookLists,bookLists"> <router-view></router-view> </keep-alive> <keep-alive exclude="indexLists"> <router-view><

Vue keep-alive和activated的用法

十年热恋 提交于 2019-12-25 13:25:50
<keep-alive> 是 Vue 的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。 1. 使用 router.meta 属性,预先定义需要缓存的组件 <keep-alive> <router-view v-if="$route.meta.keepAlive"></router-view>> </keep-alive> <router-view v-if="!$route.meta.keepAlive"></router-view> 路由部分: routes: [ { path: '/test1', component: test1, meta: { keepAlive: true } // 需要缓存 }, { path: '/test2', component: test2, meta: { keepAlive: false} // 不需要缓存 }, test1 组件会被缓存,而 test2 组件不会被缓存。 2. 动态缓存 router-view 里面的部分组件页面 如果只想 router-view 里面某个、或某些页面组件被缓存,通常有如下两种办法: 使用 include/exclude 来实现 配合 router.meta 属性来实现 1). 使用 include/exclude 来实现,每个组件中需要加 name 来匹配 include

MHA 报错:There is no alive slave. We can't do failover

妖精的绣舞 提交于 2019-12-24 11:39:43
dba http://blog.csdn.net/zengxuewen2045/article/details/51524880 关于这个错误: 1 2 3 4 Mon Feb 13 10:29:41 2017 - [error][/usr / share /perl5 /vendor_perl /MHA /ServerManager.pm, ln188] There is no alive server. We can't do failover Mon Feb 13 10:29:41 2017 - [error][/usr / share /perl5 /vendor_perl /MHA /MasterMonitor.pm, ln424] Error happened on checking configurations. at /usr / share /perl5 /vendor_perl /MHA /MasterMonitor.pm line 326 Mon Feb 13 10:29:41 2017 - [error][/usr / share /perl5 /vendor_perl /MHA /MasterMonitor.pm, ln523] Error happened on monitoring servers. Mon Feb 13 10:29:41 2017 -

Netty 实现HTTP文件服务器

亡梦爱人 提交于 2019-12-24 02:12:30
一,需求 文件服务器使用HTTP协议对外提供服务。用户通过浏览器访问文件服务器,首先对URL进行检查,若失败返回403错误;若通过校验,以链接的方式打开当前目录,每个目录或文件都以超链接的形式展现,可递归访问,并下载文件。 二,关键实现代码 ①文件服务器启动类 需要添加的通道处理器如下: @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast("http-decoder", new HttpRequestDecoder()); ch.pipeline().addLast("http-aggregator", new HttpObjectAggregator(65536)); ch.pipeline().addLast("http-encoder", new HttpResponseEncoder()); ch.pipeline().addLast("http-chunked", new ChunkedWriteHandler()); ch.pipeline().addLast("fileServerHandler", new HttpFileServerHandler(url)); } 1) HttpRequestDecoder Decodes {