我正在使用 Boost asio 发送 TCP 消息。我设置了 NO_DELAY 选项,因为这是一个“实时”控制系统。我看到使用 Wireshark 在消息中设置了 PSH 标志。我对性能感到满意,并且它按预期工作。
出于兴趣,我决定关闭 NO_DELAY 并测量性能差异。
我交换了我现有的代码:
m_tcpSocket.open(boost::asio::ip::tcp::v4());
boost::asio::ip::tcp::no_delay noDelayOption(true);
m_tcpSocket.set_option(noDelayOption);
// snip create endpoint
m_tcpSocket.connect(m_tcpServerEndpoint);
// snip build message
m_tcpSocket.send(boost::asio::buffer(pDataBuffer, size));
为了
boost::asio::ip::tcp::no_delay noDelayOption(false);
m_tcpSocket.set_option(noDelayOption);
我仍然看到设置了 PSH 标志。
我还尝试删除 set_option 代码并仍然看到它设置。
在 Wireshark 中,我看到:
104 - 105 SYN
105 - 104 SYN, ACK
104 - 105 ACK
104 - 105 PSH, ACK + my message
105 - 104 ACK
其中 104 和 105 是我的 2 台 PC 的 IP 地址。我也很惊讶带有我的数据的消息有一个 ACK。
如何关闭 NO_DELAY?