1--TEST-- 2swoole_server: reload async 3--SKIPIF-- 4<?php 5require __DIR__ . '/../include/skipif.inc'; 6skip_if_in_valgrind(); 7?> 8--FILE-- 9<?php 10require __DIR__ . '/../include/bootstrap.php'; 11 12$reloaded = new Swoole\Atomic; 13$workerCounter = new Swoole\Atomic; 14 15$pm = new SwooleTest\ProcessManager; 16$pm->setWaitTimeout(-1); 17$pm->parentFunc = function () use ($pm) { 18 $pm->kill(); 19 echo "DONE\n"; 20}; 21$pm->childFunc = function () use ($pm, $reloaded, $workerCounter) { 22 $server = new Swoole\Server('127.0.0.1', $pm->getFreePort(), SWOOLE_PROCESS); 23 $server->set([ 24 'log_file' => '/dev/null', 25 'worker_num' => rand(2, swoole_cpu_num() * 2), 26 'max_wait_time' => 10, 27 'reload_async' => true, 28 'enable_coroutine' => false, 29 ]); 30 $server->on('WorkerStart', function (Swoole\Server $server, int $worker_id) use ($pm, $reloaded, $workerCounter) { 31 $workerCounter->add(1); 32 if ($worker_id === 0 and $reloaded->get() != 1) { 33 $reloaded->set(1); 34 while ($workerCounter->get() < $server->setting['worker_num']) { 35 usleep(10000); 36 } 37 go(function () use ($pm) { 38 for ($n = 1; $n <= 5; $n++) { 39 Co::sleep(0.1); 40 echo "{$n}\n"; 41 } 42 echo "RELOADED\n"; 43 $pm->wakeup(); 44 }); 45 echo "RELOAD\n"; 46 Assert::assert($server->reload()); 47 } 48 }); 49 $server->on('Receive', function () { }); 50 $server->start(); 51}; 52$pm->childFirst(); 53$pm->run(); 54?> 55--EXPECTF-- 56RELOAD 571 582 593 604 615 62RELOADED 63DONE 64