如何使用HTTP管道通过单个TCP套接字发送PHP cURL句柄


How to send PHP cURL handles through a single TCP socket using HTTP Pipelining?

我正在尝试使用PHP cURL HTTP Pipelining功能通过单个TCP连接执行多个请求。参考此页http://www.php.net/manual/en/function.curl-multi-setopt.php我通过添加:

为curl_multi_exec()启用管道

curl_multi_setopt($mh, curlmpt_pipelining, 1);

我不想在这里发布一个大的源代码清单,但是你可以很容易地从我的github上查看或检出完整的例子https://github.com/anovikov1984/pipelining-example

监控TCP连接,我使用'netstat -t -u -c'命令在另一个控制台会话。

在我上面提到的repo中有两个脚本。一个用于Ruby,一个用于PHP。Ruby版本按预期工作,仅为3个GET请求打开单个TCP连接。但是PHP cURL版本打开的TCP连接与传递给curl_multi_exec()函数的cURL句柄的数量一样多。

我做错了什么?

看起来这可能是PHP使用PIPELINING实现curl_multi_*的错误。在使用PIPELINING时,他们可能没有公开所有必要的常量,以使开发人员能够规定curl在多请求上的行为。

我在这里提交了bug报告:https://bugs.php.net/bug.php?id=68449