1--TEST-- 2swoole_server/task: task_max_request 3--SKIPIF-- 4<?php require __DIR__ . '/../../include/skipif.inc'; ?> 5--FILE-- 6<?php 7require __DIR__ . '/../../include/bootstrap.php'; 8 9const N = 4000; 10 11use Swoole\Server; 12use Swoole\Atomic; 13 14$counter1 = new Atomic(); // onTask 15$counter2 = new Atomic(); // onFinish 16$counter3 = new Atomic(); // task num 17 18$process = new Swoole\Process(function() { 19 20 $serv = new Server('127.0.0.1', get_one_free_port()); 21 $serv->set([ 22 "worker_num" => 1, 23 'task_max_request' => 200, 24 'task_worker_num' => 4, 25 'log_file' => TEST_LOG_FILE, 26 ]); 27 28 $serv->on("WorkerStart", function (Server $serv, $worker_id) 29 { 30 if (!$serv->taskworker) { 31 for($i = 0; $i< N; $i++) { 32 $serv->task(array('type' => 'php', 'data' => RandStr::gen(100))); 33 } 34 } else { 35 //Task 进程启动数量 36 global $counter3; 37 $counter3->add(1); 38 } 39 }); 40 41 $serv->on("Receive", function (Server $serv, $fd, $reactorId, $data) 42 { 43 $serv->send($fd, "Server: $data"); 44 }); 45 46 $serv->on('Task', function ($swooleServer, $task_id, $workerId, $data) 47 { 48 global $counter1; 49 $counter1->add(1); 50 return json_encode($data); 51 }); 52 53 $serv->on('Finish', function (Server $swooleServer, $workerId, $task_data) 54 { 55 global $counter2; 56 $counter2->add(1); 57 if ($counter2->get() == N) { 58 $swooleServer->shutdown(); 59 } 60 }); 61 62 $serv->start(); 63},false, false); 64$process->start(); 65 66Swoole\Process::wait(); 67Assert::same($counter1->get(), 4000); 68Assert::same($counter2->get(), 4000); 69Assert::assert($counter3->get() > 15); 70echo "DONE\n"; 71?> 72--EXPECT-- 73DONE 74