我需要通过TCP在专有协议上连接数千个客户端以周期性地获取数据。我需要用C#编写.NET服务器应用程序。
第一次尝试是为每个tcp套接字创建一个自己的线程,它可以工作,但需要大量的CPU使用。
我发现使用.NET threadpool会更好。据我所知(http://msdn.microsoft.com/en-us/library/ms973903.aspx)我可以使用定时器,以便让每个套接字在给定的时间内(如1秒)周期性地获取数据。这对我来说不起作用,因为一旦连接被打开,套接字就会超时,因为在打开套接字再次转动之前,还有很多套接字需要打开。
另一个尝试是使用异步回调。这对我有用,但我不知道如何让套接字循环获取数据???
答案 0 :(得分:6)
尝试使用Socket的high performance API,它允许同时在非常大量的套接字上接收数据,而不需要为每个套接字使用一个线程。在文章的底部有一个完整样本的链接。 MSDN文章中还提供了SocketAsyncEventArgs class的一个示例。
答案 1 :(得分:0)
为什么不使用您需要轮询的地址填充队列,让线程池将项目从队列中取出来进行处理?
完成项目后,将其推到队列后面。