Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ WSASend速度与优化_C++_Sockets_Tcp_Winsock_Iocp - Fatal编程技术网

C++ WSASend速度与优化

C++ WSASend速度与优化,c++,sockets,tcp,winsock,iocp,C++,Sockets,Tcp,Winsock,Iocp,我正在实现一个简化的静态web服务器,其灵感来自以下示例: 问题是,在局域网或同一台机器上,WSASend不能超过2 Mbit/s。WSARecv没有这个限制。未修改套接字,已启用Nagle。 以下是我对Chrome和Windows 8.1 64位上的一个活动连接所做的测试: 使用专用线程更改为阻塞模式(无更多IOCP)->无更改 创建专用线程池->无更改 各种缓冲区大小->无变化 调试或发布->无更改 限制同一插座上同时发布的帖子数量:0(仅在前一个帖子完成后才发布新帖子),1、10、10

我正在实现一个简化的静态web服务器,其灵感来自以下示例:

问题是,在局域网或同一台机器上,WSASend不能超过2 Mbit/s。WSARecv没有这个限制。未修改套接字,已启用Nagle。 以下是我对Chrome和Windows 8.1 64位上的一个活动连接所做的测试:

  • 使用专用线程更改为阻塞模式(无更多IOCP)->无更改
  • 创建专用线程池->无更改
  • 各种缓冲区大小->无变化
  • 调试或发布->无更改
  • 限制同一插座上同时发布的帖子数量:0(仅在前一个帖子完成后才发布新帖子),1、10、100、1000:数量越大,启动速度越高。达到极限后,返回低速。如果没有限制:RAM的使用率逐渐提高到99%
这是一个拥挤的问题吗?tcp窗口不正确? 为了获得最佳性能,在不等待以前的POST通知的情况下,应该同时发布多少个数据包


找到了。有一个线程在每次准备从输出FIFO发送新数据包时被事件唤醒。错误在于,一些事件同时发出信号,因此它们被(视为)合并,而WSASend没有按需要频繁调用


建议在使用16KB数据包发送通知之前同时调用WSASend的建议次数将非常有用。

“WSASend不能超过2 Mbit/s”-您是如何得出这个结论的?我下载了一个Iso或另一个加载到内存中的大文件,浏览器会在客户端显示速度,任务管理器在服务器端显示网络使用情况。双方的速度相同。但是,短脉冲(少于2秒或3秒)处理正确。上载速率高出100倍。在每次调用中,您将向WSASend传递多少字节?数据包大小为16 KB,但结果相同,为8 KB。