长连接短连接长短连接争长短
- 摘要:其实还是这个老问题:记一次文件下载丢包填坑之旅 http://www.cnblogs.com/syjkfind/p/5281677.html即使现在只有haproxy-nginx-磁盘文件比较少的转发,但文件特别大,还是偶有文件不完整的问题。从现象上看,浏览器响应是200没问题,curl命令的日志显示是 curl:(18)transferclosedwith204800bytesremainingtoread字面上理解就是连接已关闭。查相关资料并没有任何有
其实还是这个老问题:
记一次文件下载丢包填坑之旅 http://www.cnblogs.com/syjkfind/p/5281677.html
即使现在只有haproxy-nginx-磁盘文件 比较少的转发,但文件特别大,还是偶有文件不完整的问题。
从现象上看,浏览器响应是200没问题,curl命令的日志显示是 curl: (18) transfer closed with 204800 bytes remaining to read
字面上理解就是连接已关闭。查相关资料并没有任何有关的答案,说nginx缓冲大小的现象不一样已排除,倒是偶有提到连接关闭。
百思不得其解,直到跟运维同事要到haproxy的配置看了好几遍。。。一个关键字引起了我的注意:http-server-close
【http-server-close】
相关配置参考资料 http://www.cnblogs.com/dkblog/archive/2012/03/13/2393321.html
大意就是haproxy和浏览器保持长连接,但haproxy跟后端服务器采用短连接。
什么是长连接参考资料 http://www.cnblogs.com/cswuyg/p/3653263.html
那么究竟是长连接好还是短连接好?其实要看具体场景。长连接可以节省反复连接的开销,加快响应;短连接则可以加快连接的释放,提高并发的能力。
于是改成了http-pretend-keepalive,好像发生少了很多,再后来使用gzip传输就很少再发生了。当然,偶尔再有发生也是网速的问题,无解了,总不能无限制地加大timeout吧。
再有就是顺带提起的haproxy该用7层http还是3层tcp,大部分资料都是讲http,这里有提到当https转发时得用tcp模式。http://serverfault.com/questions/611272/haproxy-http-vs-tcp
【断点续传】
改成http-pretend-keepalive后,有趣的事情发生了,浏览器得到的响应居然是206,也就是说,长连接的情况下,可以支持断点续传~~~
【开启gzip传输】
nginx本来就是开启支持gzip传输的,可是没生效啊,为什么呢?其实原因很简单,就是响应类型不对。开启支持gzip的格式是plain text和html,但默认类型是application/octet-stream。只要给返回的文件设置类型为text/plain就可以了。开启gzip和设置Content-Type的配置就不多说了。
开启gzip当然是爽到爆了,原来20MB的文本文件传输起来只有1.5MB!当然也有点小问题就是传输编码是chunked,无法知道文件的总大小,无法知道文件是否完整。但是在节省了92%带宽的情况下,都没再听用户提起过传输不成功了。
顺带,验证了一个问题,nginx设置限速,然后下载到一半把浏览器停掉,得到的文件是乱码的,说明gzip是整个文件压缩而不是每片去压缩,残缺的文件改为.zip后解压出来得到的文件则是正确的文本而内容少了后面部分。
再反思整个过程,其实有几分碰运气歪打正着的感觉,如果在haproxy层和nginx层有比较好的抓包或监控,问题可以定位得更快速更精确(然而是生产环境,你懂的)。再有就是网络链路这种东西就是个幽灵,如何重现也是个难题。幸得,各种查阅资料以及对着日志对着配置各种“格物致知”,终于在“大胆假设小心求证”中找到了出路。
至此,问题也算是相对圆满地解决了。
上文转载自:https://www.aliyun.com/jiaocheng/151894.html
在长连接方式下,需要循环读写通信数据。为了区分每一次交易的通信数据,每一次交易数据常常需要在数据头部指定该次交易的长度,接收 API 需要首先读出该长度,然后再按该长度读出指定长度的字节。长连接方式常用于一个 Client 端对一个 Server 端的通讯,一般常用于机构与机构之间的商业应用通信,以处理机构之间连续的大量的信息数据交换。或者说可用于两个系统之间持续的信息交流情况。通常为了加 快两个系统之间的信息交流,通常还需要建立几条长连接的并行通信线路。图 13 显示了一般情况下长连接通信模式的 socket 事件流,可见其最大特点是 Client 和 Server 都有循环体,而且循环体只包含读写 APIs。
长连接短连接长短连接争长短相关推荐
- dubbo是长连接还是短连接_重疾险交费年限长短区别是什么?重疾险交费年限长还是短的好?...
随着人们对健康的重视增加,消费者对保险的需求加大,重疾险占据了险种购买的大头,不过,这类险种交费分为,趸交.10.20.30年交费等多项选择,那么,重疾险交费年限长短区别是什么?重疾险交费年限长还是 ...
- c java socket编程_java+swing C/s模式的socket编程与长短连接
java+swing C/s模式的socket编程与长短连接 什么是socket 长连接与短连接 所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要 ...
- HTTP之原理,长短连接,响应码,三握四挥,八种方法
文章目录 1 HTTP原理 1.1 HTTP协议与TCP/IP协议的关系 1.2 无状态的HTTP协议 2 长短连接详解 2.1 简介 2.2 TCP短连接 2.3 TCP长连接 2.4 长连接短连接 ...
- HTTP - 长连接 短连接 长轮询 短轮询 心跳机制
错觉与突然的察觉 大多数人都知道HTTP1.0不支持长连接,知道HTTP1.1支持长连接. 这是业界的一个常识. 然而这样的描述导致了一些不做网络底层开发的开发者都下意识的认为HTTP1.1是一个可以 ...
- TCP长连接,短连接
1. TCP短连接 我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接.client向server 发送消息,server回应client, ...
- TCP系列05—连接管理—4、TCP连接的ISN、连接建立超时及TCP的长短连接
一.TCP连接的ISN 之前我们说过初始建立TCP连接的时候的系列号(ISN)是随机选择的,那么这个系列号为什么不采用一个固定的值呢?主要有两方面的原因 防止同一个连接的不同实例(di ...
- 慢慢说计网:HTTP 长短连接
小Q:什么是 HTTP 长连接? 慢慢:在 HTTP1.0 中,默认使用的是短连接,也就是服务端和客户端每进行一次 HTTP 请求,就建立一次连接,而建立一次连接需要三次握手,比较耗费时间. 从 HT ...
- 计算机网络—URL到显示的过程、Http、Https、长连接短连接
1.在浏览器中输⼊ URL 地址到显示主页的过程? 1.浏览器解析URL URL = 协议 + 存放资源的主机域名 + 文件路径名 如果没有文件路径名,则访问index.html.default.ht ...
- http协议之长连接与短连接服务器,长连接短连接
HTTP 协议与 TCP/IP 协议的关系 HTTP 协议是应用层的协议,而 TCP 协议是传输层的协议,IP 协议是网络层的协议. IP 协议主要解决网络路由以及寻址等问题,而 TCP 协议主要解决 ...
最新文章
- JVM相关概念和异常类型
- a+=b 等价于 a=a+b ?
- 浅谈AI视频技术超分辨率
- mysql optimizer_mysql 参数optimizer_switch
- 03、数据类型(02)
- KMP字符串比对算法理解
- es6 core-decorators.js
- python程序异常实例_Python werkzeug.exceptions方法代码示例
- LOJ6031 「雅礼集训 2017 Day1」字符串 SAM、根号分治
- ios 图片逆时针旋转_iOS 图片旋转方法实例代码
- 【软测面试】找工作前的准备|面试题
- python什么表示空类型_在 Python 中 __________ 表示空类型。 (2.0分)_学小易找答案
- ios12完美深色模式插件_越狱插件(三)
- android抽屉效果
- CocosCreator特效系列之图片像素化
- 在线语音转文字如何进行在线转换的
- java数组和字符串相互转换
- linux开机自启服务
- 8.10 正睿暑期集训营 Day7
- 【Python Intelhex- HEX文件修改器工具】
热门文章
- 汇编入门(长文多图,流量慎入!!!)
- 销售培训的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 智慧树\知到——程序设计基础(C语言)入门篇第六章到第十章测试答案
- 建立工资计算系统(1)——员工和工资
- CSS3 向右的箭头
- java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part1~整起(线程与进程篇:线程概念、线程状态、线程死锁)
- Objective-C 学习笔记 - part 4 - 协议
- HDU2594(Simpsons’ Hidden Talents)
- StandardServer.await: create[8005]: java.net.BindException问题原因分析
- 苹果ipv6审核解决方案