处理7000多个客户?-MultiThreading(TCP,高流量)

Pil*_*Dev 7 c++ sockets networking multithreading

我将创建一个网络系统,可以处理7000+ tcp套接字客户端,输入速度为5KB/s(客户端发送).我调查了这个问题:链接>>.他们说"创建1024个线程来处理1024个客户端".我知道有一个名为"select()"的方法,我认为我无法打开7000多个线程来处理7000多个客户端,因为我的处理器(或服务器)只有8CPU,这意味着7000多个线程是一个很大的错误.现在我想我将创建~1000个线程,我将处理这个线程中的每个7个套接字组.但现在问题是:如果我有相同的应用程序,但我有2CPU处理器,我无法获得1000个线程的最大性能,我应该创建(可能)500个线程.否则,如果我有8CPU处理器,我无法获得最大值.具有1000个线程的性能,我需要创建(可能)2000个线程来处理套接字.我怎么能理解"这个处理器可以处理X线程"?这是真的吗?

编辑:我想我可以创建一个正在观看节目的专家.也就是说,每个线程记录"我已经在X秒内完成了我的工作".和profiller处理此消息并决定创建一个线程或杀死一个线程.但是如何理解线程(或CPU)状态?

ole*_*sii 12

单个服务器无法处理35 Gb /秒的流量(即使有,也会非常昂贵).

我解决这个问题的方法是:

  • 了解API
  • 理解协议,选择最适合的工作
  • 了解压缩,安全方面(加密,身份验证),许可
  • 弄清楚如何对服务器进行负载均衡
  • 编写原型服务器和客户端
  • 在服务器上生成一些负载并了解单个实例的限制
  • 隐藏负载均衡器后面的N个服务器并观察其行为

你想要从第一行代码集中的事情:

  • 你将如何横向扩展这个
  • 您的绩效指标是什么?

编辑

所以它是KB,这要好得多:).我仍然建议先考虑LB.

有不同的技术和协议可以帮助您编写有效的应用程序.根据个人经验,我更喜欢HTTP到TCP.有许多好的负载平衡器可用,添加压缩,加密,身份验证只需几天.

我还听说如果你做任何IO操作来处理客户端请求,node.js是超高速的.

我编写的服务器是ASP.NET Web API应用程序,每个应用程序处理几MB /秒.将服务器隐藏在负载平衡器后面是微不足道的(我使用了HAProxynginx,但肯定有很多其他可用.我也使用C++套接字服务器,开发时间相当长.我的观点是,如果你可以使用高级别的语言,更喜欢低级语言.这会缩短您的开发时间(在我的情况下缩短10倍!)并使生活更轻松.