news 2026/5/12 2:12:05

对于服务端发送数据实现方式的思考

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
对于服务端发送数据实现方式的思考

一般在客户端和服务端通信中,服务端处理完请求后,需要通过 send() 将响应写回客户端。但在非阻塞 IO 模型下,send() 并不保证一次就能把全部响应写入内核 socket 发送缓冲区。如果客户端接收较慢,或者服务端短时间内产生了大量响应,内核发送缓冲区空间不足,send() 可能只写入一部分数据,甚至返回 EAGAIN/EWOULDBLOCK。此时已经成功写入内核的部分由 TCP 协议栈继续负责发送,而未写入的剩余部分仍然在用户态。如果这部分数据来自临时变量,并且应用层没有保存发送进度,函数返回后剩余数据就可能丢失;如果保存了 buffer 但不维护偏移,又可能导致下次重复发送。

因此常见做法是为每个连接维护一个应用层输出缓冲区。命令处理阶段只负责把响应追加到输出缓冲区,并注册 EPOLLOUT 写事件;当 fd 可写时,在写事件处理函数中调用 send() 尝试发送。send() 成功返回多少字节,就从输出缓冲区中消费多少字节;如果遇到 EAGAIN/EWOULDBLOCK,说明当前 socket 暂时不可写,保留剩余数据,等待下一次写事件继续发送。这样既能处理非阻塞短写,也能避免某个慢客户端阻塞整个事件循环,同时保证同一连接上的多个响应按顺序发送。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 2:07:45

【伊珊娜特别企划】宠物店“黑”话 5+1 之 不吐不快的行业心里话

【伊珊娜特别企划】宠物店“黑”话 51 之 不吐不快的行业心里话第一位“璀璨之星”已上线|保持学习状态的“怪人”。长春嘉艺宠物 & 伊珊娜认证调理店店主王碧君她说自己是个“保持学习状态的怪人”。从学美容到考A级,从拿奖到开学校,再到…

作者头像 李华
网站建设 2026/5/12 2:07:41

增材制造在国防工业的应用:从原型到关键部件生产的变革

1. 增材制造如何重塑国防工业的游戏规则如果你在军工或航空航天领域待过几年,就会深刻体会到“时间就是战斗力”这句话的分量。一个关键零件的交付延迟,可能意味着整个装备项目的停滞;一个原型设计的反复迭代,不仅烧钱&#xff0c…

作者头像 李华
网站建设 2026/5/12 2:07:17

3个关键问题决定你的Voron 2.4能否成为高速打印王者 [特殊字符]

3个关键问题决定你的Voron 2.4能否成为高速打印王者 🚀 【免费下载链接】Voron-2 Voron 2 CoreXY 3D Printer design 项目地址: https://gitcode.com/gh_mirrors/vo/Voron-2 当你决定挑战Voron 2.4这个开源高速3D打印机项目时,脑海中可能充满了疑…

作者头像 李华
网站建设 2026/5/12 2:05:39

探索Google Chart API的替代方案:QuickChart.io的实践

在过去的几年中,Google Chart API一直是许多开发者和设计者生成各种图表和标记的首选工具。然而,最近用户报告称Google Chart API中的部分功能,如地图标记生成,已不再可用,返回404错误。这引发了我们寻找替代方案的需求。今天,我们将探讨如何使用QuickChart.io来替代Goog…

作者头像 李华