N*(连接+发送+关闭)vs(Nagle禁用+连接+ N*发送+关闭),N> 1

Arm*_*ndo 14 c c++ sockets network-programming

我是套接字编程的新手(正如你已经通过我的愚蠢问题弄清楚的那样),但是把我的耻辱放在一边,我正在使用TCP posix编写一个程序.我的约束如下:从客户端发送到服务器的消息应该作为字节流读取,而我的应用程序性能不高时,应该尽快传递消息.我编写了一个TCP客户端类,目的是执行以下操作:1个连接 - 多个发送 - 并且在流式传输结束时关闭1个.问题是消息不能近乎实时地传递(我假设它等待更大的包以获得更好的吞吐量)在网上进行一些研究之后,我发现你可以禁用Nagle算法(NA) ),这样做是一个非常糟糕的主意.由于我是套接字编程的新手,我不想禁用我不完全理解的功能.所以我留下两个(坏?)选项:

  1. connect - 每封邮件发送 - 关闭
  2. 1连接 - 多次发送并在禁用NA时结束1次关闭.虽然我读到了禁用NA的后果,但在我看来,每次打开和关闭套接字只是为了发送消息也是一个代价高昂的代价.

没有留下插座还有其他解决方案吗?

谢谢.

Nem*_*emo 12

在您的情况下,禁用Nagle正是您想要做的.

请记住,每次调用write()都会立即传输您的数据.因此,请确保将整个消息打包在一起,然后在准备发送时调用write()(或writev()); 不要用小有效负载重复调用write(),因为这样会很慢.

像你这样的情况正是他们让你禁用Nagle的原因.