0

我正在玩网络服务器,使用 unix 套接字和 sendmsg / recvmsg 将套接字文件描述符传递给新的服务器进程而不会丢失任何请求。在使用 ab 进行测试时,我发现客户端连接会持续存在,并且 apachebench (ab) 会显示错误:“apr_poll: The timeout specified has expired (70007)”。

我怀疑文件描述符的地址发生了变化,这会使打开的连接变得无用,但是确保在每个请求结束时关闭连接并没有什么不同,一些请求会失败。

在套接字级别是否有一些额外的奇怪或者只是很奇怪?还有什么我应该考虑的吗?

编辑:使用 PHP 作为客户端发出请求也会在周期内停止。

4

2 回答 2

1

如果您有一个正在侦听套接字(接受传入连接)的主服务器并且您有多个工作进程,那么它确实有意义。

您可以选择一个合适/空闲的工作人员(例如,基于每个工作人员正在使用的 TCP 连接数)并将传入连接的描述符从主服务器传递给工作人员。当多个工作人员在公共端点上侦听时,这有助于避免“雷鸣般的羊群”。

于 2010-12-17T15:30:13.513 回答
0

这相当于试图通过电话线发送电话。这没有任何意义。套接字 fd 标识连接的端点。如果另一个主机想要一个连接,它必须自己建立。你不能给它你的一个。

于 2010-08-21T04:46:03.987 回答