Tcp Winsock发送多个数据包api?

Tcp Winsock发送多个数据包api?,tcp,winsock,winsock2,Tcp,Winsock,Winsock2,我注意到我在调用send()时损失了很多服务器时间。我有一项服务,它可以向中等数量的客户端发送高频小数据包(>10,您可以尝试使用WSASend()),您可以传入多个输入缓冲区进行发送。但更可能的是,您的慢度问题是由于通过“Nagle算法”进行发送合并造成的,其中操作系统缓冲传出数据,以便生成更高效的网络数据包。这可能会引入延迟,尤其是在发送大量小数据包时。如果发送速度很重要,请尝试通过setsockopt()启用套接字的TCP_NODELAY选项禁用该额外缓冲。如果您仍然不够快,请考虑使用Wi

我注意到我在调用send()时损失了很多服务器时间。我有一项服务,它可以向中等数量的客户端发送高频小数据包(>10,您可以尝试使用
WSASend()
),您可以传入多个输入缓冲区进行发送。但更可能的是,您的慢度问题是由于通过“Nagle算法”进行发送合并造成的,其中操作系统缓冲传出数据,以便生成更高效的网络数据包。这可能会引入延迟,尤其是在发送大量小数据包时。如果发送速度很重要,请尝试通过
setsockopt()启用套接字的
TCP_NODELAY
选项禁用该额外缓冲。如果您仍然不够快,请考虑使用Winsock的API,它允许您预先使用套接字内核登记数据缓冲区,以减少在内存中复制数据的需要。如果发送是缓冲的,则肯定需要接受该包,但随后立即返回到调用过程。(并继续在其自己的后台线程中缓冲/传输数据包)。为什么发送合并会影响API调用时间?很明显,我关心的不是发送需要多长时间,而是发送需要多长时间()函数需要执行,这对于很多带有小缓冲区的套接字来说是非常重要的。我将查看已注册的I/O。您怀疑发送缓冲区中的MimcPy是否占用了时间?我怀疑,因为我可以序列化要传输的包(这涉及到C++流式API调用的精心调用树)。在更短的时间内。一个N字节的memcpy不可能比复杂的序列化代码花费更长的时间来生成这些N字节。。。