我需要通过专有协议通过TCP连接数千个客户端以循环获取数据。我需要用C#编写.NET服务器应用程序。通过数千个TCP套接字轮询
第一次尝试是为每个TCP套接字创建一个自己的线程,该线程工作正常,但需要大量的CPU使用。
我发现改用.NET线程池会更好。据我所知(http://msdn.microsoft.com/en-us/library/ms973903.aspx)我可以使用定时器,以便让每个套接字在给定的时间周期(如1秒)周期性地获取数据。这对我来说不起作用,因为一旦连接打开,套接字就会超时,因为在打开套接字再次打开之前,有很多套接字必须打开。
另一个尝试是使用异步回调。这会适用于我,但我不知道如何让套接字周期性地获取数据?
“成千上万”和“线索”这些词不能相互结合。尝试查看是否可以使用'await'关键字进行延续,这将允许您针对阻止端口编写代码,而不会经常实际阻止代码。这就是Erlang和Stackless Python背后的原理 - 专为网络并发而构建的两种语言。 – 2012-04-24 14:53:28
为什么要循环客户端来获取数据?它会更简单(尽管这是相对的),只需在每个套接字上保留一个异步读取并在数据到达时处理数据。如果您真的需要循环读取,则可以推迟异步读取的重新发布,直到所有其他套接字都被服务。 – 2012-04-24 14:54:03
只是不投票。 – 2012-04-24 14:54:04