大并发服务器不得不说的技术--TCP_CORK
SOL_TCP, TCP_CORK 的头文件:#include <netinet/tcp.h>
CORK选项提高了网络的利用率,因为它直接禁止了小包的发送。
Nagle算法没有禁止小包发送,只是禁止了大量小包的发送。
如果把tcp当成服务端与客户端的管道,cork 就是给管道加个塞子。
为什么 要加个塞子呢?
先来举个例子:
int times = 10;
while( times--)
{send( sock_fd, buf, 1, 0 )
}
这段program会发送数据10次,每次就发送1个字节,这样会不会什么问题呢?
记得以前农忙的时候,田里的稻子收割完了,要打成稻谷,就放一个打稻机子,父亲在机子旁打稻,而我则负责抱起稻子送给他。父亲打稻的速度很快,很小的时候我每次只抱一捆稻子,就会不停 地奔跑,很忙很累。。。等我稍大一点,能一次抱几捆的时候绝不会只抱一捆,这个道理是不是很浅显。
话说回来,如果发送数据的包很小,而次数又很多,网络也会很累,这个累也有学名的,叫网络拥塞。
我们需要将稻子收集多一点再送,意思就是将网络包整大一点,怎么做到 呢?
当包很小的时候先停一停,等到 一定的数量的包产生了再一起发,是不是有点像给水流管道加个塞子塞住,等水够多的时候才放出,其实我觉得更像一个水闸,什么时候放水由闸门开关决定。
上面的代码稍改一下:
int times = 10;
int on = 1;
setsockopt ( sock_fd, SOL_TCP, TCP_CORK, &on, sizeof (on));
while( times--)
{send( sock_fd, buf, 1, 0 )
}
on = 0;
setsockopt ( sock_fd, SOL_TCP, TCP_CORK, &on, sizeof (on));
2-3行相当于塞上塞子(关掉闸门),4-7行相当于收集更多的水,8-9行相当于拨去塞子(打开闸门),这样就解决了网络拥塞的问题。
后面的学习我们会发现第9行其实有时候可以省掉。。。
大并发服务器不得不说的技术--TCP_CORK相关推荐
- 大型网站架构演变过程、大并发服务器架构
大型网站架构演变过程: [Step1]web server与数据库分离 web动静资源分离 静态请求:如html, js, css, img 动态请求:如jsp, php [Step2]缓存处理 客户 ...
- 大并发服务器架构 大型网站架构演变
服务器的三条要求: 高性能:对于大量请求,及时快速的响应 高可用:7*24 不间断,出现故障自动转移,这叫fail over(故障转移) 伸缩性:使用跨机器的通信(TCP) 另外任何网络系统结构都可以 ...
- 【大并发服务器开发】简要谈谈分布式服务器的设计方案思路推变过程
文章目录 服务器设计目的 C/S结构 一个典型的服务器架构 服务器四大性能杀手 服务器设计目的 高性能:能够处理大量请求同时到来,及时的给予响应: 高可用:服务器7×24小时不间断运行,即使主机故障, ...
- java web 大并发服务器_计算-服务器最大并发量-http协议请求-以webSphere服务器为例-考虑线程池...
请求的处理流程 广域网上有大量的并发用户同时访问web服务器,web服务器传递请求给应用服务器(web容器),web容器传递请求给ejb容器,然后ejb容器发送数据库连接请求给数据库. 请求的处理流程 ...
- 打造基于大并发通信技术及大数据技术的O2O系统
2019独角兽企业重金招聘Python工程师标准>>> 本文来自于个推CTO叶新江在2015Qcon的分享整理. 截止2015年6月,个推SDK累计接入总用户数达50亿 (其中海外近 ...
- 一般云服务器支持多少并发,一般云服务器支持是多大并发?
云服务器支持是多少并发,换句话说云服务器最多能支持多少人同时在线,这个问题是没法获得一个精确回答的.由于結果会遭受带宽.网络服务器响应速度.不一样客户已经浏览的网页页面大小等一系列要素的限定,而这种全 ...
- 单机十万并发HLS直播服务器的防盗链技术
单机十万并发HLS直播服务器的防盗链技术 本文主要介绍基于HLS直播服务器的十万并发防盗链实现 录制切片服务器 HTTP 服务器 (nginx) LuaLib 录制切片服务器 录制切片服务器负责把直播 ...
- 性能追击:万字长文30+图揭秘8大主流服务器程序线程模型 | Node.js,Apache,Nginx,Netty,Redis,Tomcat,MySQL,Zuul
本文为<高性能网络编程游记>的第六篇"性能追击:万字长文30+图揭秘8大主流服务器程序线程模型". 最近拍的照片比较少,不知道配什么图好,于是自己画了一个,凑合着用,让 ...
- 27.Linux网络编程 掌握三次握手建立连接过程掌握四次握手关闭连接的过程掌握滑动窗口的概念掌握错误处理函数封装实现多进程并发服务器实现多线程并发服务器
基本概念叫协议 什么叫协议? 协议是一个大家共同遵守的一个规则, 那么在这个网络通信当中,其实就是双方通信和解释数据的一个规则,这个概念 你也不用记,你只要心里明白就可以了, 分层模型, 物数网传会表 ...
- Linux 并发服务器雏形总结
如下介绍一个并发回射客户端/服务器的雏形,所谓回射:就是客户端输入一条数据,服务器端读取并显示,然后服务器端再把刚读取的信息发送回客户端进行显示.示意图如下: 所谓并发服务器:就是一个服务器可以同时为 ...
最新文章
- 高文、张钹、杨强隔空论道:AI精度与隐私的博弈
- 关于Java的Classpath详解
- java字符串反转的方法,Java实现字符串反转的几种方法
- 【MFC相关】MFC入门相关
- Typora 快捷键设置
- 2020牛客暑期多校训练营(第九场)K-The Flee Plan of Groundhog
- UML预约挂号系统建模(团队作业)
- 删除导航窗格多余的图标,如Onedrive、3D对象
- html图片不能拖动,关于html5图片拖动的代码的问题?
- onenote 思维导图_印象笔记、OneNote、熊掌记 哪个笔记App更适合文字工作者?
- mysql 简述pk uk fk 的区别和对数据库性能的影响_数据库pk fk ak
- input number 数字输入限制,最大值最小值输入范围限制
- 显著性检验,T-test,P-value
- 5分钟实现微信小程序绘制二维码
- 一文掌握java对内存空间的划分
- Cmake语句find_package()函数
- cent os 火狐_本周关注我们:整体框架和Firefox OS
- 鲍尔默最后一次员工大会:声泪俱下别微软
- DB2的日期时间类型以及转换问题
- 根据自己维护的工作日历表查询7个工作日后的日期