UNIX套接字魔术。推荐用于高性能应用?

时间:2011-06-29 10:39:31

标签: linux sockets networking tcp

我正在使用accept()在进程之间转移sendmsg() ed套接字。简而言之,我正在尝试构建一个简单的负载均衡器,它可以处理大量连接而无需缓冲流数据。

在处理大量(比方说数百个)并发TCP连接时,这是一个好主意吗?如果重要,我的系统是Gentoo Linux

2 个答案:

答案 0 :(得分:3)

您可以按照上一个答案here共享文件描述符。

就个人而言,我总是使用pre-fork实现服务器。父级设置监听套接字,生成(pre-forks)子级,每个子级执行阻塞接受。我使用管道为父< - >儿童交流。

答案 1 :(得分:1)

直到有人做基准测试并确定发送文件描述符有多“难”,这仍然是猜测(有人可能会弹出:“嘿,发送这样的描述符很便宜”)。但是这里有。

如果您只是使用线程,您将(可能,如上所述)会更好。您可以拥有以下工作流程:

  • 启动一个等待工作的线程池。或者,您可以在请求到达时生成新线程(它比您想象的便宜)
  • 使用epoll(7)等待流量(等待连接+有趣的流量)
  • 当有趣的流量到达时,您只需向其中一个线程发送“作业”。

现在,绕过整个描述符发送部分。那捕获的是什么?问题是如果其中一个线程崩溃,整个过程崩溃。因此,您需要进行基准测试并确定哪种方法最适合您的服务器。

就我个人而言,我会按照上面概述的方式进行。另一点:如果工作人员是进行接受的进程的子进程,则不需要发送描述符。