如何构建一个接受数千个持久网络连接的服务器?

时间:2009-12-14 18:41:00

标签: linux performance networking network-programming

我是关于在linux上构建一个服务器(我选择编程语言),它接受来自桌面软件的许多TCP / IP套接字持久连接。如何廉价而有效地完成这项工作?一台机器不能有超过60000个端口,所以如果我必须支持600k连接,那么我需要10个linux机箱?

由于每个连接所需的计算量非常小(95%的空闲时间),一个linux盒子已经可以处理600k我不想浪费金钱和资源运行10个盒子只是为了解决端口限制。

有什么想法吗?

4 个答案:

答案 0 :(得分:6)

连接由以下元组标识:[服务器IP;服务器端口;客户IP;客户端端口]因此,每台机器可以使用超过60,000个端口。

Erlang有效地处理了1000个连接中的10个。看看Apache和Erlang Yaws之间的comparison

答案 1 :(得分:1)

NOT 需要为每个连接提供一个端口。 HTTP服务器只使用一个端口(通常为80)。

答案 2 :(得分:1)

由于任何相对广泛使用的语言都有一个相当有效的套接字库,我会选择以下语言:

  1. 无论您需要对来自桌面的数据进行哪些处理,效率都很高
  2. 你已经足够熟悉(阅读;最熟悉)以避免最常见的陷阱/设计模式

答案 3 :(得分:0)

你应该能够轻松地使用任何体面的框架。我们使用Twisted这是好的(假设你理解python和异步编程),如果有点奇怪的话要理解。

异步编程几乎是给定的,因为你可能不想启动600k线程。