'timeout' => 30, // 请求发出后等待响应的超时时间
<?php
require __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
$worker = new Worker();
$worker->onWorkerStart = function(){
$options = [
'max_conn_per_addr' => 128, // 每个域名最多维持多少并发连接
'keepalive_timeout' => 15, // 连接多长时间不通讯就关闭
'connect_timeout' => 30, // 连接超时时间
'timeout' => 30, // 请求发出后等待响应的超时时间
];
$http = new Workerman\Http\Client($options);
$http->get('http://example.com/', function($response){
var_dump($response->getStatusCode());
echo $response->getBody();
}, function($exception){
echo $exception;
});
};
Worker::runAll();
不设置的话 默认是 30s
如果想要一直不超时,需要怎么设置?
为什么有这种需求, 那这个请求不就一直busy状态了么
谢谢啊,是这样的大哥,国外的第三方数据源,正常来说第三方数据源会提供websocket连接,然后服务端和第三方建立长连接,但是这个第三方没有websocket,只有stream流连接,会实时的推送报价数据,我想拿到这个实时的报价数据,然后处理一下,再转发给前端对应的连接对象,这个是上次提问的问题。https://www.workerman.net/q/12568
我把代码及截图贴出来了,如果不能设置不超时,那我估计只能设置一个很大的数值了,如:18600秒。之前的方案是使用GuzzleHttp stream流请求不停的存到redis,然后再time定时不停的从redis中取,这样会有延迟,后来改成的这个方案。
把 Workerman\Http\ConnectionPool中的 tryToCreateConnectionCheckTimer 注释掉 试试
![截图](/upload/img/20240527/27665447d839e4.png)
我试下,谢谢
直接改
package
的源码不太好吧,新建Client
、ConnectionPool
这两个类,重写Client
类的__construct
方法 和ConnectionPool
类的tryToCreateConnectionCheckTimer
方法比较靠谱。先试试, 可用的话, 当然得复制出来一份, 哈哈