求C++客户端服务器项目中数据接收量的计算公式
计算客户端接收数据总量的公式推导
场景逻辑明确
服务器的迭代处理规则:
- 每轮优先处理
n + k条数据:其中n条发送给客户端,k条丢弃 - 若剩余数据不足
n + k条:- 剩余数据 ≥
n:发送n条,丢弃剩余部分 - 剩余数据 <
n:发送全部剩余数据,无丢弃
- 剩余数据 ≥
正确公式
客户端最终接收的数据总量可以通过以下公式计算:
接收总量 = n * (N // (n + k)) + min(N % (n + k), n)
//:整数除法(向下取整)%:取余运算
案例验证
案例1:N=11,n=3,k=0
- 计算批次大小:
n + k = 3 - 完整批次数:
11 // 3 = 3,剩余数据量:11 % 3 = 2 - 接收总量:
3*3 + min(2, 3) = 9 + 2 = 11,与预期一致。
案例2:N=11,n=3,k=3
- 计算批次大小:
n + k = 6 - 完整批次数:
11 // 6 = 1,剩余数据量:11 % 6 =5 - 接收总量:
3*1 + min(5, 3) =3 +3=6,与预期一致。
原公式无效原因
你之前尝试的 n * ceil(N / (n + k)) 存在缺陷:当最后一轮剩余数据量小于n时,该公式会错误地按n条计算接收量,导致结果偏大。比如案例1中,ceil(11/3)=4,3*4=12,但实际仅接收11条。
内容的提问来源于stack exchange,提问作者Arthur
相关产品推荐
相关产品推荐

