我想通過GatewayWorker做一個(gè)利用websocket實(shí)時(shí)推送消息給客戶端的功能(類似股票指數(shù)的實(shí)時(shí)更新),我現(xiàn)在是通過在event中寫一個(gè) onwebsocketconnect然后利用add方法每兩秒推送一次數(shù)據(jù),這時(shí)我的思路是希望在add里面去調(diào)用我在thinkphp里面寫的一個(gè)公用方法brokerAccount_data()來把數(shù)據(jù)傳給GatewayWorker,然后再由GatewayWorker傳給客戶端,但是,我現(xiàn)在無法調(diào)到我寫在thinkphp中的函數(shù)。。。還請大神指教,謝謝!
public static function onWebSocketConnect($client_id,$data){
if ($data != 'http://local.gendan5.com'){
Gateway::closeClient($data);
}else{
// $xmlInfo = brokerAccount_data('xm-zero',2,'./cache/xm-zero');
Gateway::sendToClient($client_id,json_encode($data));
\Workerman\Lib\Timer::add(2,function ($client_id,$data){
Gateway::sendToClient($client_id,json_encode($data));
require('http://local.gendan5.com/tp/index.php?s=/Home/GwSendMessage');
// $func = A('Common/function.php');
$xmlInfo = brokerAccount_data('xm-zero',2);
},array($client_id,$data));
}
}
?
這里是無法調(diào)用tp里的公共函數(shù)的,你可以把這個(gè)函數(shù)放在gateway里,或者定義一個(gè)類,實(shí)例化并調(diào)用它
你好,感謝你的解答,我后來想了一個(gè)方法,通過使用curl去獲取我的這個(gè)方法的鏈接的方式,可以拿到數(shù)據(jù)了,但是,又出現(xiàn)了一個(gè)問題,就是我需要傳參到這個(gè)方法中,但是我不知道應(yīng)該怎么才能夠把我需要的參數(shù)通過前端傳到onwebsocketconnect這個(gè)方法中來,這個(gè)請問應(yīng)該怎么處理好一點(diǎn)?
public static function onWebSocketConnect($client_id,$data){
if ($data['server']['HTTP_ORIGIN'] != 'http://local.gendan5.com'){
Gateway::closeClient($data['server']['HTTP_ORIGIN']);
}else{
Gateway::sendToClient($client_id,json_encode($data));
\Workerman\Lib\Timer::add(2,function ($client_id,$data){
$url = 'http://local.gendan5.com/tp/index.php/?s=Home/test/test_file_get_contents';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$xmlInfo = curl_exec($curl);
curl_close($curl);
Gateway::sendToClient($client_id,$xmlInfo);
},array($client_id,$data));
}
我后來想了一個(gè)方法,通過使用curl去獲取我的這個(gè)方法的鏈接的方式,可以拿到數(shù)據(jù)了,但是,又出現(xiàn)了一個(gè)問題,就是我需要傳參到這個(gè)方法中,但是我不知道應(yīng)該怎么才能夠把我需要的參數(shù)通過前端傳到onwebsocketconnect這個(gè)方法中來,這個(gè)請問應(yīng)該怎么處理好一點(diǎn)?
public static function onWebSocketConnect($client_id,$data){
if ($data != 'http://local.gendan5.com'){
Gateway::closeClient($data);
}else{
Gateway::sendToClient($client_id,json_encode($data));
\Workerman\Lib\Timer::add(2,function ($client_id,$data){
$url = 'http://local.gendan5.com/tp/index.php/?s=Home/test/test_file_get_contents';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$xmlInfo = curl_exec($curl);
curl_close($curl);
Gateway::sendToClient($client_id,$xmlInfo);
},array($client_id,$data));
}