1--TEST-- 2swoole_server/task: task [enable_coroutine] 3--SKIPIF-- 4<?php require __DIR__ . '/../../include/skipif.inc'; ?> 5--FILE-- 6<?php 7require __DIR__ . '/../../include/bootstrap.php'; 8Swoole\Runtime::enableCoroutine(); 9$pm = new SwooleTest\ProcessManager; 10 11$randoms = []; 12for ($n = MAX_REQUESTS; $n--;) 13{ 14 $randoms[] = random_bytes(mt_rand(0, 65536)); 15} 16 17$pm->parentFunc = function ($pid) use ($pm) { 18 for ($n = MAX_REQUESTS; $n--;) { 19 go(function () use ($pm, $n) { 20 $c = new Swoole\Coroutine\Http\Client('127.0.0.1', $pm->getFreePort()); 21 $c->set(['timeout' => 5,]); 22 Assert::assert($c->get('/task?n='.$n)); 23 Assert::same($c->body, "OK"); 24 }); 25 } 26 swoole_event_wait(); 27 echo "DONE\n"; 28 $pm->kill(); 29}; 30$pm->childFunc = function () use ($pm, $randoms) { 31 $server = new swoole_http_server('127.0.0.1', $pm->getFreePort(), SWOOLE_PROCESS); 32 $server->set([ 33 'log_file' => '/dev/null', 34 'worker_num' => 1, 35 'task_worker_num' => 1, 36 'task_enable_coroutine' => true, 37 ]); 38 $server->on('workerStart', function ($serv, $wid) use ($pm) { 39 $pm->wakeup(); 40 }); 41 $server->on('request', function (swoole_http_request $request, swoole_http_response $response) use ($server, $randoms) { 42 $n = $request->get['n']; 43 list($ret_n, $ret_random) = $server->taskwait($n, 1); 44 if ($ret_n !== $n) { 45 $response->end("ERROR MATCH {$ret_n} with {$n}"); 46 return; 47 } elseif ($ret_random !== $randoms[$n]) { 48 $response->end("ERROR EQUAL {$ret_n}(" . strlen($ret_random) . ") with {$n}(" . strlen($randoms[$n]) . ")"); 49 return; 50 } 51 $response->end('OK'); 52 }); 53 $server->on('task', function (swoole_http_server $server, Swoole\Server\Task $task) use ($pm, $randoms) { 54 Assert::same($task->worker_id, 0); 55 Assert::assert($task->flags > 0); 56 Assert::assert($task->id >= 0); 57 $n = $task->data; 58 co::sleep(0.002); 59 $task->finish([$n, $randoms[$n]]); 60 }); 61 $server->start(); 62}; 63$pm->childFirst(); 64$pm->run(); 65?> 66--EXPECT-- 67DONE 68