在本地调试php通过使用php的curl 调用Thrift rpc 服务时, 使用了curl, 但是一直出现超时的现象,一直到超过请求所附带的超时时间, 这个是因为Windows下的php是以php-cgi进程的形式运行的.
我的php项目的fastcig-pass的设置为(127.0.0.1:9000)。
默认设置是以keepalive方式请求,接收到PHP文件时,交与php-cgi解析处理,等待响应。
而在本地文件以CURL请求本地环境中PHP文件时,之前的PHP还在等待CURL后的结果,这时9000端口已经被占用.导致CURL一直在处于等待状态.
curl 其中一项设置:
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
当到达5秒后, curl 被强制中断, 反而收到了RPC传来的response
在查阅资料后, 我发现Windows 中php-cgi并不能像Linux环境下的php-fpm 那样自己创建新的进程, 只能通过command的方式启动两个进程…
我的解决方案
把php客户端的fastcgi_pass 设置为了127.0.0.1:9004
打开两个cmd 分别在php根目录下执行这两个命令:
- php-cgi.exe -b 127.0.0.1:9000 -c php.ini
- php-cgi.exe -b 127.0.0.1:9004 -c php.ini
但是cmd 命令窗口不能关闭。
问题解决.