严重bug,定时器阻塞了端口监听!怎么办?

1.只开启了一个线程。同时有定时器任务和端口监听
2.定时器每一秒执行一次。但是代码会执行2秒,导致定时器接连不断的运行,端口发来的数据无法响应。
怎么办?怎么实现:定时器执行完一次之后,先处理端口的任务然后再执行下一次定时器任务 ?
 
代码:
$inner_http_worker = new Worker('http://0.0.0.0:1598');
$inner_http_worker->count = 1; //进程数


// 当http客户端发来数据时触发添加任务
$inner_http_worker->onMessage = array($this, 'onMessage');
//$inner_http_worker->onMessage = function ($http_connection, $data) {
$inner_http_worker->onWorkerStart = array($this, 'onWorkerStart');

// 执行监听

$inner_http_worker->listen();
Worker::runAll();
    public function onWorkerStart(){
Timer::add(1, array($this, 'workerloop'),[],true);
}

/**
* 监听techs
*/
public function onMessage($http_connection, $data){
          echo  '收到下载数据的请求,';

}
/**
* 定时执行任务
*/
public function workerloop(){
echo "每1秒执行一次';
sleep(2);
}

 

 

 
已邀请:

抽不完的寂寞

赞同来自:

把定时任务丢其它进程去做。
定时任务这么慢当然不能和socket请求放一起执行

要回复问题请先登录注册