如何使用 HTTP Pipelining 通过单个 TCP 套接字发送 PHP cURL 句柄?
Posted
技术标签:
【中文标题】如何使用 HTTP Pipelining 通过单个 TCP 套接字发送 PHP cURL 句柄?【英文标题】:How to send PHP cURL handles through a single TCP socket using HTTP Pipelining? 【发布时间】:2014-08-27 07:03:00 【问题描述】:我正在尝试使用 php cURL HTTP Pipelining 功能通过单个 TCP 连接执行多个请求。参考此页面http://www.php.net/manual/en/function.curl-multi-setopt.php 我正在通过添加为 curl_multi_exec() 启用管道:
curl_multi_setopt($mh, CURLMOPT_PIPELINING, 1);
我不想在此处发布大量源代码列表,但您可以在此处https://github.com/anovikov1984/pipelining-examplehttps://github.com/anovikov1984/pipelining-example 的 github 上轻松查看或签出完整示例
为了监控 TCP 连接,我在另一个控制台会话中使用了“netstat -t -u -c”命令。
在我上面提到的存储库中,有两个脚本。一个用于 Ruby,一个用于 PHP。 Ruby 版本按需要工作,只为 3 个 GET 请求打开单个 TCP 连接。但是 PHP cURL 版本打开的 TCP 连接数与传递给 curl_multi_exec() 函数的 cURL 句柄数一样多。
我做错了什么?
【问题讨论】:
也许添加KEEP-ALIVE
有帮助?不确定..认为它默认启用。能否请您添加网络服务器,它是基于 fastcgi 还是基于 mod。
你为什么介意建立了多少个 tcp 连接?
【参考方案1】:
看起来这可能是 PHP 使用 PIPELINING 实现 curl_multi_* 中的一个错误。看起来他们可能不会公开所有必要的 CONSTANTS 以使开发人员能够在使用 PIPELINING 时决定 curl 在多请求上的行为方式。
我在这里提交了错误报告: https://bugs.php.net/bug.php?id=68449
【讨论】:
当您向错误跟踪系统提交错误报告时,报告应说明问题所在,而不是仅仅依靠另一个网站上的讨论链接来描述问题。特别是,错误报告的标题应该是具体的,而不是笼统的术语。 我很抱歉。我认为“包”选项是相关的。请注意 Package 选项是如何标记为“cURL 相关”的。链接上方有一个简短的描述。如果不清楚,我深表歉意。如果有人真的在处理这个错误,并且觉得这个错误不清楚,他们通常不会在这张票上和我一起打开一个线程来获取更多信息,而不是把那个对话带到 Stack Overflow 上吗?随时更新错误票以反映更合适的描述,以便我可以学习如何操作以供将来参考。 我的评论只是作为一个观察者,我与Php或Curl项目无关,所以我不觉得有什么不好的感觉。只是作为一个提示,告诉您如何在错误报告上获得更多关注。以上是关于如何使用 HTTP Pipelining 通过单个 TCP 套接字发送 PHP cURL 句柄?的主要内容,如果未能解决你的问题,请参考以下文章