使用winsock从多个主机接收许多数据报

时间:2010-06-09 11:02:38

标签: c++ windows-mobile winsock

我正在开发一个应用程序,它将渲染分布在多个设备(大学项目)中。

每个帧由几个块(16x16像素)组成,每个设备被“分配”多个要渲染的块。这些块在渲染时会被压缩并序列化为缓冲区,直到达到最大值,此时它将被发送。

我的问题出在接收端,需要从多个设备接收每帧的几个数据报。目前我为每个数据包调用recv,但这需要为每个数据包进行上下文切换。通过一次呼叫接收许多数据包会更好。数据包标识它来自哪个客户端,因此这些地址无关紧要。

我查看了WSARecv和WSARecvFrom,但似乎都没有能够从多个主机接收多个数据包。

提前致谢:)

修改

使用单独的线程从OS层获取数据包似乎不会改善这种情况。实际上,Amardeep提出的解决方案的性能低于之前的方案。

获取几个数据包也很不错,有人知道怎么做吗?

1 个答案:

答案 0 :(得分:2)

这可能不是您试图解决的任何感知性能问题的原因。如果没有看到您的代码,我会猜测您正在做的是:

1.  recv a packet
2.  Process a packet
3.  repeat

你应该做的是:

1.  use one thread to recv packets with a pool of buffers and shove the received buffer pointers into a queue.
2.  use another slightly lower priority thread to pull items from the queue and process them.

这将极大地提高您的系统消化数据的能力,并错过更少的数据报。