我将创建一个网络系统,该系统可以使用 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/秒的流量(即使存在,这也将是非常昂贵的)。

我要解决此问题的方法是:

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

  • 您要从第一行代码集中的事情:
  • 您将如何水平缩放
  • 您的绩效指标是什么

  • 编辑

    所以它在 KB 中,这要好得多:)。我仍然建议您先考虑LB。

    有多种技术和协议(protocol)可帮助您编写高效的应用程序。从个人经验来看,我更喜欢HTTP而不是TCP。有许多良好的负载均衡器可用,添加压缩,加密,身份验证已经是几天的事了。

    我还听说node.js如果您执行任何IO操作来处理客户端请求都非常快。

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

    07-24 09:46
    查看更多