5

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

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

我发现使用 .NET 线程池会更好。据我了解(http://msdn.microsoft.com/en-us/library/ms973903.aspx),我可以使用计时器来让每个套接字在给定的时间段内(如 1 秒)循环获取数据。这对我不起作用,因为一旦连接打开,套接字就会超时,因为在打开的套接字再次打开之前必须打开更多的套接字。

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

4

2 回答 2

6

尝试使用 Socket 的高性能 API,它允许同时在大量套接字上接收数据,而无需每个套接字使用一个线程。在文章的底部有一个完整示例的链接。MSDN 文章中还有一个SocketAsyncEventArgs 类的示例。

于 2012-04-24T15:02:57.530 回答
0

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

一旦你完成了一个项目,就把它推到队列的后面。

于 2012-04-24T14:54:50.953 回答