当前位置: 首页 > news >正文

[性能]高速收发的TCP/MQTT通信

Nagle算法‌是一种TCP/IP协议中的优化算法,旨在减少小数据包的数量,从而减少网络拥塞的可能性。该算法规定,在一个TCP连接上最多只能有一个未被确认的小分组。当数据被发送后,如果收到确认(ACK)之前,TCP会暂时存储待发送的数据,等待收到ACK后再将这些数据一起发送出去。

在物联网设备中Nagle算法会有20~40ms的延迟,这在高速场景下是一种弊端,因此要关闭nagle算法。

在下面的代码中,我们使用setsockopt函数来设置TCP_NODELAY选项,并将nagle_enable设置为0,从而关闭Nagle算法。

int nagle_enable = 0; // 关闭Nagle算法
setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &nagle_enable, sizeof(nagle_enable)

完整代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netinet/tcp.h>int main() {int sockfd;struct sockaddr_in server_addr;int nagle_enable = 0; // 关闭Nagle算法// 创建socketif ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {perror("socket creation failed");exit(EXIT_FAILURE);}// 设置服务器地址memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(8080);if(inet_pton(AF_INET, "127.0.0.1", &(server_addr.sin_addr)) <= 0) {perror("invalid address");exit(EXIT_FAILURE);}// 设置TCP_NODELAY选项,关闭Nagle算法if (setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &nagle_enable, sizeof(nagle_enable)) < 0) {perror("setsockopt TCP_NODELAY failed");exit(EXIT_FAILURE);}// 连接服务器if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {perror("connect failed");exit(EXIT_FAILURE);}// 其他操作...// 关闭socketclose(sockfd);return 0;
}

http://www.mrgr.cn/news/28651.html

相关文章:

  • 后端-实现excel的导出功能(超详细讲解)
  • JS爬虫实战之TikTok_Shop验证码
  • sql文件
  • 解决Oracle DECODE函数字符串截断问题的深度剖析20241113
  • 用MVVM设计模式提升WPF开发体验:分层架构与绑定实例解析
  • 【Python】轻松实现机器翻译:Transformers库使用教程
  • 微服务_1、入门
  • 使用卷积神经网络进行人类活动识别的特征学习:惯性测量单元和音频数据的案例研究
  • macOS Sequoia 15 发布,iPhone 镜像、密码应用程序、窗口平铺更新等带来全新体验
  • 云原生信息安全:筑牢数字化时代的安全防线
  • 107. 超快速排序
  • 系统架构设计师教程 第5章 5.7 软件项目管理 笔记
  • [Java]maven从入门到进阶
  • Linux基础---07文件传输及解决yum安装失效的方法
  • 年化60.7%,最大回撤-16.5%,RSRS标准分择时效果差不多
  • pytorch 模型训练太慢怎么办,试一试这17种方法可以优化训练过程,pytorch 提高训练速度的方法 除了num_worker
  • 【小白】一文安装anaconda
  • Java创建者模式(一)——单例设计模式(饿汉式、懒汉式、枚举式 | 完成详解,附有代码+案例)
  • docker容器镜像服务配置
  • Vue学习记录之一(介绍及脚手架的使用)
  • 深入解析 Cursor:AI 驱动的编程工具与应用示例
  • RabbitMQ Spring客户端使用
  • 道路裂缝,坑洼,病害数据集-包括无人机视角,摩托车视角,车辆视角覆盖道路
  • pytorch训练过程搭建及模型的保存与加载
  • LAMP环境搭建记录:基于VM的Ubuntu虚拟机
  • DFT理论知识 scan insertion详解