1--TEST-- 2swoole_server/task: scheduler warning 3--SKIPIF-- 4<?php require __DIR__ . '/../../include/skipif.inc'; ?> 5--FILE-- 6<?php 7require __DIR__ . '/../../include/bootstrap.php'; 8 9use Swoole\Client; 10use Swoole\Server; 11 12const N = 3; 13const LOG_FILE = __DIR__.'/test.log'; 14 15$counter = new Swoole\Atomic(0); 16 17$pm = new SwooleTest\ProcessManager; 18$pm->parentFunc = function () use ($pm) { 19 $client = new Client(SWOOLE_SOCK_UDP, SWOOLE_SOCK_SYNC); 20 if (!$client->connect('127.0.0.1', $pm->getFreePort(), 2)) { 21 exit("connect failed\n"); 22 } 23 $client->send("ping"); 24 echo $client->recv(); 25 sleep(2); 26 $pm->kill(); 27}; 28 29$pm->childFunc = function () use ($pm, $counter) { 30 $serv = new Server("127.0.0.1", $pm->getFreePort(), SWOOLE_PROCESS, SWOOLE_SOCK_UDP); 31 32 $serv->set([ 33 'worker_num' => 1, 34 'task_worker_num' => 2, 35 'log_file' => LOG_FILE, 36 'log_level' => SWOOLE_LOG_NOTICE, 37 ]); 38 39 $serv->on("WorkerStart", function (Server $serv) use ($pm) { 40 if ($serv->taskworker) { 41 $pm->wakeup(); 42 } 43 }); 44 45 $serv->on('Packet', function (Server $serv, string $data, array $clientInfo) { 46 $n = N; 47 while ($n--) { 48 $serv->task(['data' => $data, 'client' => $clientInfo]); 49 usleep(10000); 50 } 51 }); 52 53 $serv->on('Task', function (Server $serv, $taskId, int $workerId, $data) use ($pm, $counter) { 54 static $sleep = false; 55 if (!$sleep) { 56 $sleep = true; 57 sleep(1); 58 } 59 if ($counter->add() == N) { 60 $serv->sendto($data['client']['address'], $data['client']['port'], "DONE\n"); 61 } 62 }); 63 64 $serv->start(); 65}; 66 67$pm->childFirst(); 68$pm->run(); 69 70echo file_get_contents(LOG_FILE); 71unlink(LOG_FILE); 72?> 73--EXPECTF-- 74DONE 75[%s] WARNING Server::timer_callback() (ERRNO %d): No idle task worker is available 76