直接写入套接字与缓冲区

我已经看到多个应用程序首先将它们的数据写入缓冲区,然后将该缓冲区写入 socket而不仅仅是直接写入 socket

我有两个问题:

  • 这是为什么?

  • 如果直接写入套接字是合理的,那么:如何让套接字等待更多数据(我们在这里处理微秒/纳秒延迟)或者如何明确告诉套接字 发送(不写入内部缓冲区)数据。现在内核正在发送我在单独数据包中写入的每个字节,这显然不是最佳的;)

我在Go中制作我的应用程序,这里net.Conn实现了 io.Writer并且创建带有2 个参数的实用函数是有意义的:writer 本身正在写入的数据,所以最后我可以输入它并且很高兴:

packets.WriteUint8(conn, 0x0)

我知道在许多语言中,缓冲区都有自己的实用方法来写入/读取结构,但是如果我想专门在 Go 中尝试上述方法怎么办?我试过寻找类似的问题,但失败了。信息:应用程序旨在在 Linux 上运行


蛊毒传说
浏览 100回答 1
1回答

梦里花落0921

应用程序缓冲写入网络连接,因为使用大缓冲区的单个写入调用比使用小缓冲区的多个写入调用更有效。调用SetNoDelay (false)使操作系统延迟数据包传输,希望减少数据包的数量。没有显式刷新 TCP 连接缓冲区的选项。在编写您自己的实用程序之前,请查看bufio.Writer类型。许多应用程序使用这种类型来缓冲对 TCP 连接和文件的写入。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go