GatewayWorker怎么和thinkphp3.2.3整合使用,请大神指点

z325988

我想通过GatewayWorker做一个利用websocket实时推送消息给客户端的功能(类似股票指数的实时更新),我现在是通过在event中写一个 onwebsocketconnect然后利用add方法每两秒推送一次数据,这时我的思路是希望在add里面去调用我在thinkphp里面写的一个公用方法brokerAccount_data()来把数据传给GatewayWorker,然后再由GatewayWorker传给客户端,但是,我现在无法调到我写在thinkphp中的函数。。。还请大神指教,谢谢!

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));
       }
   }

图片
 

3793 2 0
2个回答

ysy49271743

这里是无法调用tp里的公共函数的,你可以把这个函数放在gateway里,或者定义一个类,实例化并调用它

  • z325988 2019-02-26

    你好,感谢你的解答,我后来想了一个方法,通过使用curl去获取我的这个方法的链接的方式,可以拿到数据了,但是,又出现了一个问题,就是我需要传参到这个方法中,但是我不知道应该怎么才能够把我需要的参数通过前端传到onwebsocketconnect这个方法中来,这个请问应该怎么处理好一点?

    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));
    }

z325988

我后来想了一个方法,通过使用curl去获取我的这个方法的链接的方式,可以拿到数据了,但是,又出现了一个问题,就是我需要传参到这个方法中,但是我不知道应该怎么才能够把我需要的参数通过前端传到onwebsocketconnect这个方法中来,这个请问应该怎么处理好一点?

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));
       }
  • 暂无评论
年代过于久远,无法发表回答
🔝