我将创建一个网络系统,该系统可以使用 5KB/s 输入(客户端发送)来处理7000+ tcp套接字客户端。我研究了这个问题:Link>>。他们说“创建1024个线程来处理1024个客户端”。我知道有一个名为“select()” 的方法,我认为我无法打开7000+线程来处理7000+客户端,因为我的处理器(或服务器)只有8CPU,这意味着7000+线程很大错误。现在,我想我将创建〜1000个线程,并且将处理该线程中的每7个套接字组。但是现在有个问题:如果我有相同的应用程序,但是我有2CPU处理器,那么1000个线程无法获得最高性能,我应该创建(也许)500个线程。否则,如果我有8CPU处理器,则无法获得最大。性能与1000个线程,我需要创建(也许)2000个线程来处理套接字。我如何理解“此处理器可以处理X个线程”?这是真的吗?
编辑:我想我可以创建一个正在观看节目的补全。即,每个线程记录“我在X秒内完成了工作”。和补语处理此消息,并决定创建一个线程或杀死一个线程。但是如何了解线程(或CPU)的状态呢?
最佳答案
单个服务器无法处理35 Gb/秒的流量(即使存在,这也将是非常昂贵的)。
我要解决此问题的方法是:
您要从第一行代码集中的事情:
编辑
所以它在 KB 中,这要好得多:)。我仍然建议您先考虑LB。
有多种技术和协议(protocol)可帮助您编写高效的应用程序。从个人经验来看,我更喜欢HTTP而不是TCP。有许多良好的负载均衡器可用,添加压缩,加密,身份验证已经是几天的事了。
我还听说node.js如果您执行任何IO操作来处理客户端请求都非常快。
我写的服务器是ASP.NET Web API应用程序,每个服务器处理几MB/秒。将服务器隐藏在负载均衡器后面是微不足道的(我使用了HAProxy和nginx,但是肯定还有很多可用的方法。我也使用过C++套接字服务器,并且它的开发时间相当长。我的意思是,如果您可以使用高级别的语言,而不是低级别的语言,这将缩短您的开发时间(在我的情况下,是10倍!),并使生活更轻松。