最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

Swoole在PHP-fpm/apache中使用task功能

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 14:42:56
文檔

Swoole在PHP-fpm/apache中使用task功能

Swoole在PHP-fpm/apache中使用task功能:● 新建 RedisServer.php● 代碼如下<php use Swoole\Redis\Server; $server = new Server("127.0.0.1", 9501, SWOOLE_PROCESS ); $server->set(array( 'task_worker_num'
推薦度:
導(dǎo)讀Swoole在PHP-fpm/apache中使用task功能:● 新建 RedisServer.php● 代碼如下<php use Swoole\Redis\Server; $server = new Server("127.0.0.1", 9501, SWOOLE_PROCESS ); $server->set(array( 'task_worker_num'

1.jpg

● 新建 RedisServer.php

● 代碼如下

<?php
use Swoole\Redis\Server;
$server = new Server("127.0.0.1", 9501, SWOOLE_PROCESS );
$server->set(array(
 'task_worker_num' => 32,
 'worker_num' => 1,
 'task_enable_coroutine' => true,
 'heartbeat_check_interval' => 5,
 'heartbeat_idle_time' => 10,
));
$server->setHandler('LPUSH', function ($fd, $data) use ($server) {
 $taskId = $server->task($data);
 if ($taskId === false) {
 $server->send($fd, Server::format(Server::ERROR));
 } else {
 $server->send($fd, Server::format(Server::INT, $taskId));
 }
});
$server->on('Finish', function($serv, $taskID, $data) {
 $stats = $serv->stats();
 if ($stats['tasking_num'] > 10) { //tasking_num 當(dāng)前正在排隊(duì)的任務(wù)數(shù)
 echo "剩余任務(wù)信息:" . json_encode($serv->stats()) . "\n";
 }
});
$server->on('Task', function ($serv, $data) {
 go(function () {
 usleep(50000);
 });
 var_dump($data);
});
$server->start();

task 里面 usleep (50000); 模擬任務(wù)執(zhí)行時(shí)間

● 新建 Queue.php

● 代碼如下

<?php
$redis = new Redis;
$redis->connect('127.0.0.1', 9501);
$x=1; 
while($x <= 1000) {
 $redis->lpush("myqueue", json_encode(array("hello".$x, "swoole")));
 $x++;
}

模擬 1000 的任務(wù)投遞

經(jīng)測試,1 秒處理完畢

可以根據(jù) Task 任務(wù)執(zhí)行的速度調(diào)節(jié) task_worker_num 控制啟動(dòng)的進(jìn)程數(shù)量


● 這些進(jìn)程是由 swoole 底層負(fù)責(zé)管理的,在發(fā)生致命錯(cuò)誤或進(jìn)程退出后底層會(huì)重新創(chuàng)建新的任務(wù)進(jìn)程

task_worker_num


● 最大值不得超過 SWOOLE_CPU_NUM * 1000

● 單個(gè) task 的處理耗時(shí),如 100ms,那一個(gè)進(jìn)程 1 秒就可以處理 1/0.1=10 個(gè) task

● task 投遞的速度,如每秒產(chǎn)生 2000 個(gè) task

● 2000/10=200,需要設(shè)置 task_worker_num => 200,啟用 200 個(gè) task 進(jìn)程

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Swoole在PHP-fpm/apache中使用task功能

Swoole在PHP-fpm/apache中使用task功能:● 新建 RedisServer.php● 代碼如下<php use Swoole\Redis\Server; $server = new Server("127.0.0.1", 9501, SWOOLE_PROCESS ); $server->set(array( 'task_worker_num'
推薦度:
標(biāo)簽: php 中使用 task
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top