1

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

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

4

2 回答 2

3

您可以在此处按照之前的答案共享文件描述符。

就个人而言,我一直使用 pre-fork 来实现服务器。父级设置侦听套接字,生成(预分叉)子级,每个子级执行阻塞接受。我使用管道进行父 <-> 子通信。

于 2011-06-29T10:47:05.230 回答
1

在有人进行基准测试并确定发送文件描述符有多“难”之前,这仍然是猜测(有人可能会弹出:“嘿,发送这样的描述符太便宜了”)。但是这里。

如果你只使用线程,你会(很可能,阅读上文)会更好。您可以有以下工作流程:

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

现在,这确实绕过了整个描述符发送部分。那么有什么问题呢?问题是,如果其中一个线程崩溃,整个进程就会崩溃。因此,您可以自行确定最适合您的服务器的基准。

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

于 2011-06-29T10:55:36.560 回答