在c#应用程序中维护大量打开的套接字
本文关键字:套接字 应用程序 维护 | 更新日期: 2023-09-27 17:57:53
我正在C#中编写一个应用程序,我希望在其中维护大量的开放套接字连接(tcp),并能够响应来自所有这些连接的数据。现在,通常要做的事情(afaik)是在所有线程上调用BeginRead,但据我所知,BeginRead会生成一个线程,并在该线程中等待数据,我已经了解到,当使用大量线程时,线程往往不会很好地扩展。虽然我可能错了,但如果是这样的话,请告诉我。
这听起来可能很愚蠢,但我想要的是能够维护尽可能多的开放套接字连接(在我的机器/os允许的情况下),同时仍然能够对来自其中任何一个的数据做出尽可能快的反应,并尽可能少地使用系统资源。
我想的是把所有的数据都放在某种列表中,然后在它们上面运行一个线程,检查新数据并对新数据采取行动(如果有的话),尽管我认为这样的循环最终会炸了我的cpu(因为循环中没有任何块)。有没有什么方法(简单与否,我不介意使用一些更复杂的算法来解决这个问题)可以实现这一点?如有任何帮助,我们将不胜感激。
否。异步方法不生成线程,而是使用IO完成端口。
BeginXXX
方法已被弃用。请改用XxxxAsync
方法。
- http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.sendasync.aspx
- http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.receiveasync.aspx