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

Linux 如何构建一个接受数千个持久网络连接的服务器?,linux,performance,networking,network-programming,Linux,Performance,Networking,Network Programming,我打算在linux上构建一个服务器(我会选择编程语言),它接受来自桌面软件的许多TCP/IP套接字持久连接。如何以低成本、高效率的方式实现这一点?一台机器不能有超过60000个端口,所以如果我必须支持600k连接,那么我需要10个linux机箱 由于每个连接所需的计算量非常小(95%的时间是空闲的),一个linux机器已经可以处理600k的数据了,我不想为了绕过端口限制而浪费金钱和资源运行10个机器 有什么想法吗?连接由以下元组标识:[服务器IP;服务器端口;客户端IP;客户端端口],因此,每台

我打算在linux上构建一个服务器(我会选择编程语言),它接受来自桌面软件的许多TCP/IP套接字持久连接。如何以低成本、高效率的方式实现这一点?一台机器不能有超过60000个端口,所以如果我必须支持600k连接,那么我需要10个linux机箱

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


有什么想法吗?

连接由以下元组标识:[服务器IP;服务器端口;客户端IP;客户端端口],因此,每台机器有60000多个端口可用


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

连接由以下元组标识:[服务器IP;服务器端口;客户端IP;客户端端口],因此,每台机器有60000多个端口可用


Erlang可以有效地处理1000个连接中的10个。看看Apache和Erlang Yaws之间的情况。

您不需要每个连接都有一个端口。HTTP服务器将只使用一个端口(通常为80)。

您不需要为每个连接使用一个端口。HTTP服务器将只使用一个端口(通常为80)。

因为任何相对广泛使用的语言都有一个合理有效的套接字库,我会选择一种语言,它可以:

  • 无论您需要对台式机上的数据进行何种处理,它都是高效的
  • 您已经足够熟悉(阅读;最熟悉)以避免最常见的陷阱/设计模式

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

  • 无论您需要对台式机上的数据进行何种处理,它都是高效的
  • 您已经足够熟悉(阅读;最熟悉)以避免最常见的陷阱/设计模式

  • 您应该能够用任何合适的框架轻松地完成这项工作。我们使用Twisted,这很好(假设您理解python和异步编程),如果理解起来有点奇怪的话


    异步编程基本上是给定的,因为您可能不想启动600k线程。

    您应该能够使用任何合适的框架轻松地完成这项工作。我们使用Twisted,这很好(假设您理解python和异步编程),如果理解起来有点奇怪的话


    异步编程基本上是给定的,因为您可能不想启动600k线程。

    如果您正在运行服务器,您只需要绑定一个端口,而不是每个客户端都需要一个端口。它不是在接受连接时创建服务器端口吗?它创建服务器套接字,这是一对客户端(ip:端口)-服务器(ip:端口)因为您将要编写一个Unix网络服务器守护程序:lighttpd就是其中之一,您应该查看源代码。src/server.c中的
    main()。与您的操作团队交谈,如果他们计划操作此应用程序,他们可能应该了解一些容量管理方面的知识。如果您正在运行服务器,您只需要绑定一个端口,而不是为每个客户端绑定一个端口。它不是在接受连接时创建服务器端口吗?它创建服务器套接字,这是一对客户端(ip:port)-server(ip:port),因为您将要编写一个Unix网络服务器守护进程:lighttpd就是其中之一,您应该查看源代码
    src/server.c中的函数是一个简短的列表,列出了网络守护进程需要做的所有标准事情:编写pid文件、响应SIGHUP、双叉以摆脱控制tty等等。如果您为600k客户端提供服务,10个盒子并不是浪费钱,因为您可能会想要更多(实际上)。请咨询您的运营团队,如果他们计划运营此应用程序,他们可能应该了解一些容量管理方面的知识。因此,根据该元组,服务器端没有内存限制以外的限制?我当时搞错了。@erotsppa:这就是我喜欢的地方,所以:您可以随时学习新东西!玩得开心!所以根据那个元组,服务器端除了内存限制之外没有任何限制?我当时搞错了。@erotsppa:这就是我喜欢的地方,所以:你总能学到新东西!玩得开心!端口80就是一个很好的例子;+1.端口80就是一个很好的例子;+1。