gpt4 book ai didi

c++ - N*(connect + send + close) vs (Nagle disable + connect + N*send + close),N > 1

转载 作者:IT老高 更新时间:2023-10-28 22:38:45 26 4
gpt4 key购买 nike

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

  1. 连接-发送-关闭每条消息
  2. 1 次连接 - 多次发送并在最后关闭 1 次,并禁用 NA。虽然我阅读了禁用 NA 的后果,但在我看来,每次打开和关闭套接字只是为了发送消息也是要付出昂贵的代价。

还有其他不留socket的解决方案吗?

谢谢。

最佳答案

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

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

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

关于c++ - N*(connect + send + close) vs (Nagle disable + connect + N*send + close),N > 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6221543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com