'timeout' => 30, // 請求發(fā)出后等待響應的超時時間
<?php
require __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
$worker = new Worker();
$worker->onWorkerStart = function(){
$options = [
'max_conn_per_addr' => 128, // 每個域名最多維持多少并發(fā)連接
'keepalive_timeout' => 15, // 連接多長時間不通訊就關閉
'connect_timeout' => 30, // 連接超時時間
'timeout' => 30, // 請求發(fā)出后等待響應的超時時間
];
$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
謝謝啊,是這樣的大哥,國外的第三方數據源,正常來說第三方數據源會提供websocket連接,然后服務端和第三方建立長連接,但是這個第三方沒有websocket,只有stream流連接,會實時的推送報價數據,我想拿到這個實時的報價數據,然后處理一下,再轉發(fā)給前端對應的連接對象,這個是上次提問的問題。http://m.wtbis.cn/q/12568
我把代碼及截圖貼出來了,如果不能設置不超時,那我估計只能設置一個很大的數值了,如:18600秒。之前的方案是使用GuzzleHttp stream流請求不停的存到redis,然后再time定時不停的從redis中取,這樣會有延遲,后來改成的這個方案。
<?php
use Workerman\Connection\TcpConnection;
use Workerman\Http\Client;
use Workerman\Protocols\Http\Chunk;
use Workerman\Protocols\Http\Request;
use Workerman\Protocols\Http\Response;
use Workerman\Worker;
require 'vendor/autoload.php';
$worker = new Worker("websocket://127.0.0.1:2001");
$worker->count = 1;
$worker->onWorkerStart = function (Worker $worker) {
$headers = [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer 5dc864e9879fe3f7a6d33621fda8283f-f524c......',
'Accept-Datetime-Format' => 'UNIX'
];
// 外匯和金屬在一起,共89個
$instruments = ['EUR_USD', 'USD_JPY', 'GBP_USD', 'AUD_USD', 'USD_CAD', 'USD_CHF', 'NZD_USD', 'EUR_GBP', 'EUR_AUD', 'EUR_CAD', 'EUR_CHF', 'EUR_JPY', 'EUR_NZD', 'GBP_JPY', 'GBP_AUD', 'GBP_CAD', 'GBP_CHF', 'GBP_HKD', 'GBP_NZD', 'GBP_SGD', 'GBP_ZAR', 'GBP_PLN', 'EUR_HUF', 'USD_HKD', 'USD_TRY', 'USD_SEK', 'USD_CNH', 'USD_SGD', 'USD_NOK', 'USD_HUF', 'USD_DKK', 'USD_CZK', 'USD_ZAR', 'USD_PLN', 'USD_THB', 'EUR_ZAR', 'EUR_HKD', 'EUR_DKK', 'EUR_CZK', 'EUR_SEK', 'EUR_PLN', 'EUR_NOK', 'EUR_TRY', 'EUR_SGD', 'USD_MXN', 'SGD_JPY', 'NZD_CHF', 'CHF_JPY', 'CAD_JPY', 'NZD_JPY', 'CAD_HKD', 'AUD_CAD', 'TRY_JPY', 'ZAR_JPY', 'AUD_HKD', 'SGD_CHF', 'AUD_SGD', 'CHF_ZAR', 'NZD_HKD', 'NZD_SGD', 'HKD_JPY', 'NZD_CAD', 'AUD_NZD', 'CAD_SGD', 'AUD_CHF', 'AUD_JPY', 'CAD_CHF', 'CHF_HKD', 'XAU_USD', 'XAU_EUR', 'XAU_GBP', 'XAU_JPY', 'XAU_CAD', 'XAU_AUD', 'XAU_CHF', 'XAU_NZD', 'XAU_HKD', 'XAU_SGD', 'XAU_XAG', 'XAG_USD', 'XAG_EUR', 'XAG_GBP', 'XAG_JPY', 'XAG_CAD', 'XAG_AUD', 'XAG_CHF', 'XAG_NZD', 'XAG_HKD', 'XAG_SGD'];
$http = new Client();
$http->request('這里是一個國外的流連接地址,這里是一個國外的流連接地址,這里是一個國外的流連接地址/pricing/stream', [
'method' => 'GET',
'data' => [
'instruments' => implode(',', $instruments)
],
'headers' => $headers,
'progress' => function ($buffer) {
$res = json_decode($buffer, true);
if ($res && $res['type'] == 'HEARTBEAT') {
var_dump($res);
}
},
'success' => function ($response) {
var_dump(new Chunk(''));
},
'error' => function ($exception) {
echo $exception;
}
]);
};
// 運行worker
Worker::runAll();