udp接收缓冲设置多大

先说一下保护消息边界,就是指传输协议把数据当作一条独立的消息在网上传输,接收端只能接收独立的消息。这个机制决定了udp的特性:
1. udp可以多线程对同一个fd进行发包操作,如果是tcp多线程发送,会让流乱序,接收端完全无法解析出来
2. udp接收端每次只能拿到一个包,tcp需要借助自定义包头来拆分出一个一个的包

假如现在发送端发送了长度为100,200,300的3个包,接收端需要调用3次recvfrom才能取完,并且不能保证先后顺序。一般情况下,为了保证recvfrom成功,我们要保证接收缓冲大于报文的大小,也就是缓冲设置比最大的300要大。但是还是会丢包,常见情况有:
1. 发送端抖动突然请求量很大,而接收端不能在短时间内处理这些请求,造成缓冲区不够用
2. 接收端需要访问磁盘等IO操作,磁盘也会抖动,导致接收端处理能力下降,造成缓冲区不够用
很明显解决方案是加大缓冲区,那么是不是越大越好?
成熟的系统逻辑一般都会有处理超时机制,假设超时时间是1s,前端页面发送请求会带上时间戳,并且自己也开始计时,如果1s内还没有收到回复就弹请求超时页面,后台收到请求查看时间戳超过1s也不会处理直接丢掉。
假如现在接收缓冲设置为可以存放100个请求的大小,后台处理能力是10个/s,1s之后处理了10个请求,接收缓冲中后面90个请求的前端页面已经弹了请求超时了,另外新的10个请求进来了接收缓冲,后台接着处理结果后面连续90个都是超时,终于才轮到新的10个请求可以处理了,这是不科学的,所以接收缓冲的大小最优的是设置为超时时间*后台处理能力,也就是10个请求包的大小。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值