| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 记一次调试UDP丢包 -> 正文阅读 |
|
[网络协议]记一次调试UDP丢包 |
目录 ??????? 问题:在windows平台上开发的程序,UDP发送较频繁(1-2us一包),结果收数据总是有丢失。尽管单独起了一个线程专门收数据,且线程中不使用sleep休眠,避免休眠时错过数据包,但仍然无法避免丢数据。 解决方案:windows下默认SO_RCVBUF的缓存是8KB.所以当发来的数据积攒超过8K时,就发生数据丢失。故在建立socket之后调用setsockopt函数,将接收缓存变为充分大的值,比如1M。
?修改后,尽管UDP端口接收了几个G的数据,但没有发生丢失。 分析:有的人会说,就算把缓存开大了,但是只要数据发来的频率高于处理的频率,缓存总是会溢出的!从测试结果来看,这个理论并不成立。我的猜想是,其实处理速率从统计意义上并不慢于数据发来的速率。但是在某些时刻,数据发来的频率可能会高于平均值,或者操作系统运行时性能有“抖动”,导致UDP端口连续到来若干包,积压了几个KB(比如10KB)。假如缓存很小,如只有8K,那么就会发生数据丢失。但是缓存很大的情况下,这个“抖动”不足以造成溢出,所以数据不会丢失。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 9:35:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |