加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营 > 正文

php使用Swoole实现毫秒级定时任务的方法

发布时间:2020-11-18 14:53:19 所属栏目:运营 来源:网络整理
导读:副标题#e# 短视频,自媒体,达人种草一站服务 这篇文章主要介绍了php使用Swoole实现毫秒级定时任务的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 项目开发中,如果有定时任务的业务要求,

// 监听数据接收事件
  public function onReceive(swoole_server $serv, $fd, $from_id, $data)
  {
    echo "Get Message From Client {$fd}:{$data}n";
    //$this->writeLog('接收客户端参数:'.$fd .'-'.$data);
    $res['result'] = 'success';
    $serv->send($fd, json_encode($res)); // 同步返回消息给客户端
    $serv->task($data); // 执行异步任务
  }

/**
 
  * @param $serv swoole_server swoole_server对象
  * @param $task_id int 任务id
  * @param $fromid int 投递任务的worker_id
  * @param $data string 投递的数据
  */
  public function onTask(swoole_server $serv, $task_id, $from_id, $data)
  {
    swoole_timer_tick(30000, function($timer) use ($task_id) { // 启用定时器,每30秒执行一次
      $memPercent = $this->getMemoryUsage();
      echo date('Y-m-d H:i:s') . '当前内存使用率:'.$memPercent."n";
    });
  }


  /**
  * @param $serv swoole_server swoole_server对象
  * @param $task_id int 任务id
  * @param $data string 任务返回的数据
  */
  public function onFinish(swoole_server $serv, $task_id, $data)
  {
    //
  }


  // 监听连接关闭事件
  public function onClose($serv, $fd, $from_id) {
    echo "Client {$fd} close connectionn";
  }

public function stop()
  {
    $this->serv->stop();
  }

private function getMemoryUsage()
  {
    // MEMORY
    if (false === ($str = @file("/proc/meminfo"))) return false;
    $str = implode("", $str);
    preg_match_all("/MemTotals{0,}:+s{0,}([d.]+).+?MemFrees{0,}:+s{0,}([d.]+).+?Cacheds{0,}:+s{0,}([d.]+).+?SwapTotals{0,}:+s{0,}([d.]+).+?SwapFrees{0,}:+s{0,}([d.]+)/s", $str, $buf);
    //preg_match_all("/Bufferss{0,}:+s{0,}([d.]+)/s", $str, $buffers);

$memTotal = round($buf[1][0]/1024, 2);
    $memFree = round($buf[2][0]/1024, 2);
    $memUsed = $memTotal - $memFree;
    $memPercent = (floatval($memTotal)!=0) ? round($memUsed/$memTotal*100,2):0;

return $memPercent;
  }
}

我们以场景一为例,在onTask启用定时任务,每隔30秒计算一次内存使用率。实际应用中可以把计算好的内存按时间写入数据库等存储中,然后可以根据前端需求用来渲染成统计图表,如:

接着服务端代码 publictaskServer.php:

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读