直接写入套接字vs写入缓冲区



我见过多个应用首先将它们的数据写入缓冲区,然后将该缓冲区写入套接字而不是直接到套接字.

我有两个问题:

  • 为什么?

  • 如果直接写入套接字是合理的,那么:我如何使套接字等待更多的数据(我们这里处理的是微秒/纳秒延迟)或者我如何显式地告诉套接字发送(不写)数据. 现在内核将我写的每个字节发送到单独的数据包中,这显然不是最优的;)

我在Go中创建应用程序,此处为net。康涅狄格州实现了io。作家创建具有2个参数的实用函数是有意义的:写入器本身正在写入的数据,所以最后我可以直接输入

packets.WriteUint8(conn, 0x0)

我知道,在许多语言缓冲器有自己的实用方法的写入/读取结构,但如果我想尝试上面的方法,特别是在Go?我试着找到类似的问题,但失败了。信息:应用程序意味着在Linux上运行

应用程序缓冲区写入网络连接,因为使用大缓冲区的单个写调用比使用小缓冲区的多个写调用更有效。

调用SetNoDelay(false)使操作系统延迟数据包的传输,希望减少数据包的数量。

没有选项显式刷新TCP连接的缓冲区。

在编写自己的实用程序之前,先看一下bufio。作家类型。许多应用程序使用此类型来缓冲对TCP连接和文件的写入。

最新更新