想做一个服务器对客服端数据的反馈,服务器不停的发1 ,直到客户端发2时停止。下面的程序会进入死循环,问问怎么弄

five_seven1987

public static function onMessage($client_id, $message)
{

   var_dump($message);// 向所有人发
   while($message==1) {
       $timesleep=2;
       sleep($timesleep);
       Gateway::sendToClient($client_id, $_SERVER['REMOTE_ADDR']);
       if($message==2){
           break;
           var_dump($message);
       }
   }

}

1581 1 0
1个回答

blogdaren

禁止使用死循环,更不要用sleep系统调用,改用定时器实现。

  • five_seven1987 2020-05-06

    请教一下,大体的思路时怎么样的。就是服务器对客户端不段的发送信息1,值到客户端反馈2时停止

  • blogdaren 2020-05-06

    @6964:
    根据你图示的代码逻辑大致是这样的:
    $worker->onMessage = function($connection, $data){
    if(empty($connection->timer_id) && 1 == $data)
    {
    $connection->timer_id = Timer::add(2, function()use($connection){
    //发送数据到客户端
    }, [], true);
    }

    if(isset($connection->timer_id) && 2 == $data) 
    {   
        Timer::del($connection->timer_id);
        unset($connection->timer_id);
    }   

    }

  • blogdaren 2020-05-06

    另外如果是在gatewayworker框架里做,一样的思路,把timer_id存给当前worker对象的一个静态数组;

  • five_seven1987 2020-05-07

    谢谢了,

年代过于久远,无法发表回答
🔝