你的位置:首页 > 操作系统

[操作系统]长连接短连接长短连接争长短


其实还是这个老问题:

记一次文件下载丢包填坑之旅 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层有比较好的抓包或监控,问题可以定位得更快速更精确(然而是生产环境,你懂的)。再有就是网络链路这种东西就是个幽灵,如何重现也是个难题。幸得,各种查阅资料以及对着日志对着配置各种“格物致知”,终于在“大胆假设小心求证”中找到了出路。

至此,问题也算是相对圆满地解决了。




深圳去日本旅游报价办理日本旅游签证跟团日本旅游需要多少钱几月份去日本旅游最好什么时候去日本旅游最便宜2015-2015达古冰山冰雪旅游节时间什么时候?_有什么好玩的? 2015梅州客天下元旦有什么活动?梅州客天下元旦活动介绍? 元旦去哪儿 广西最适合短期出游的旅行地 梅州迎春灯会有什么好玩的?梅州灯会活动介绍? 博罗象头山雷公峡漂流价格?象头山雷公峡漂流到什么时候? 惠州雷公峡漂流票在哪买便宜?雷公峡漂流网上预订? 惠州博罗雷公峡漂流怎么去?博罗雷公峡漂流交通路线? 台山月亮湾漂流全长多少?台山月亮湾一天游攻略? 汕头礐石风景区路线图?礐石风景区直通车怎么走? 汕头礐石风景区好玩吗?礐石风景区好不好玩? 2015云浮蟠龙洞门票怎么预订?云浮蟠龙洞风景区订票? 云浮蟠龙洞地址?云浮蟠龙洞风景区旅游攻略? 成都西岭雪山滑雪场延长免门票时间至11月30日 南田温泉门票_珠江南田温泉门票价格_三亚南田温泉门票多少钱 2012—2013成都直飞国家_成都直飞热门出境旅游目的地盘点 邮轮上的衣食住行娱 M04-0805SRC-P Datasheet M04-0805SRC-P Datasheet M04-0805T2GC Datasheet M04-0805T2GC Datasheet M04-0805YC Datasheet M04-0805YC Datasheet 雁门关在哪 雁门关在哪 雁门关在哪 悉尼是哪个国家的 悉尼是哪个国家的 悉尼是哪个国家的 九寨沟在哪 九寨沟在哪 九寨沟在哪