1--TEST-- 2swoole_server/task: timer 3--SKIPIF-- 4<?php 5require __DIR__ . '/../../include/skipif.inc'; 6?> 7--FILE-- 8<?php 9require __DIR__ . '/../../include/bootstrap.php'; 10 11use Swoole\Coroutine\Http\Client; 12use Swoole\Server\Task; 13use Swoole\WebSocket\Frame; 14use Swoole\WebSocket\Server; 15 16use function Swoole\Coroutine\run; 17 18$pm = new SwooleTest\ProcessManager; 19$pm->parentFunc = function (int $pid) use ($pm) { 20 run(function () use ($pm) { 21 $cli = new Client('127.0.0.1', $pm->getFreePort()); 22 $cli->set(['websocket_compression' => true, ]); 23 $cli->upgrade('/'); 24 $cli->push('Hello Swoole'); 25 $data = $cli->recv(5); 26 Assert::eq($data->data, 'OK'); 27 echo "DONE\n"; 28 }); 29 $pm->kill(); 30}; 31$pm->childFunc = function () use ($pm) { 32 $http = new Server('127.0.0.1', $pm->getFreePort(), SWOOLE_PROCESS); 33 $http->set([ 34 'worker_num' => 1, 35 'task_worker_num' => 1, 36 'event_object' => true, 37 'log_file' => '/dev/null', 38 ]); 39 $http->on('message', function (Server $server, Frame $frame) { 40 $server->task(['fd' => $frame->fd]); 41 }); 42 $http->on('WorkerStart', function (Server $server, int $workerId) { 43 if ($server->taskworker) { 44 swoole_timer_after(1, function () use ($server, $workerId) { 45 var_dump("after1 : " . time()); 46 }); 47 // never callback 48 swoole_timer_after(10000, function () use ($server, $workerId) { 49 var_dump("after2 : " . time()); 50 }); 51 } 52 }); 53 $http->on('task', function (Server $server, Task $task) { 54 var_dump('begin : ' . time()); 55 swoole_timer_after(2000, function () use ($server, $task) { 56 var_dump('end : ' . time()); 57 Assert::true($server->push($task->data['fd'], "OK")); 58 }); 59 }); 60 $http->start(); 61}; 62$pm->childFirst(); 63$pm->run(); 64?> 65--EXPECTF-- 66string(19) "after1 : %d" 67string(18) "begin : %d" 68string(16) "end : %d" 69DONE 70