轮询数千个TCP套接字

时间:2012-04-24 14:50:47

标签: c# .net tcp threadpool

我需要通过TCP在专有协议上连接数千个客户端以周期性地获取数据。我需要用C#编写.NET服务器应用程序。

第一次尝试是为每个tcp套接字创建一个自己的线程,它可以工作,但需要大量的CPU使用。

我发现使用.NET threadpool会更好。据我所知(http://msdn.microsoft.com/en-us/library/ms973903.aspx)我可以使用定时器,以便让每个套接字在给定的时间内(如1秒)周期性地获取数据。这对我来说不起作用,因为一旦连接被打开,套接字就会超时,因为在打开套接字再次转动之前,还有很多套接字需要打开。

另一个尝试是使用异步回调。这对我有用,但我不知道如何让套接字循环获取数据???

2 个答案:

答案 0 :(得分:6)

尝试使用Socket的high performance API,它允许同时在非常大量的套接字上接收数据,而不需要为每个套接字使用一个线程。在文章的底部有一个完整样本的链接。 MSDN文章中还提供了SocketAsyncEventArgs class的一个示例。

答案 1 :(得分:0)

为什么不使用您需要轮询的地址填充队列,让线程池将项目从队列中取出来进行处理?

完成项目后,将其推到队列后面。