Linux下Go语言直接写socket与缓冲区写socket问题咨询
Socket写入实践相关技术疑问
观察到的行业通用现象
不少应用程序不会选择直接向socket写入数据,而是先将待发送数据写入缓冲区,再将缓冲区内容整体写入socket。针对该常见实践,存在两个核心技术疑问:
- 业界普遍采用先写缓冲区再整体写入socket方案的核心原因是什么?
- 如果直接向socket写入数据是合理可行的方案,要如何让socket等待更多数据(涉及的等待延迟为微秒/纳秒级),或是如何显式指定socket直接发送数据(而非写入内核内部缓冲区)?当前实际开发遇到的问题是:内核会将写入的每个字节单独封装为数据包发送,传输效率极低。
当前开发场景说明
目前使用Go语言开发应用,Go标准库中net.Conn实现了io.Writer接口,原本计划编写接收「写入器实例」「待写入数据」两个参数的工具函数,最终支持如下形式的便捷调用:
packets.WriteUint8(conn, 0x0)
了解到很多编程语言的缓冲区实现都自带结构体读写的配套工具方法,但本次希望在Go中尝试上述直接写入socket的方案,检索相关问题未找到有效参考。
补充说明:该应用的目标运行环境为Linux。
内容的提问来源于stack exchange,提问作者Londek
相关产品推荐
相关产品推荐

