1--TEST-- 2swoole_server: last time 3--SKIPIF-- 4<?php 5require __DIR__ . '/../include/skipif.inc'; 6?> 7--FILE-- 8<?php 9require __DIR__ . '/../include/bootstrap.php'; 10 11use Swoole\Server; 12 13$pm = new SwooleTest\ProcessManager; 14 15$pm->parentFunc = function ($pid) use ($pm) { 16 Co\Run(function () use ($pm) { 17 $cli = new Swoole\Coroutine\Client(SWOOLE_SOCK_TCP); 18 $r = $cli->connect(TCP_SERVER_HOST, $pm->getFreePort(), 1); 19 Assert::assert($r); 20 $cli->send("test1\r\ntest2\r\n"); 21 $result = [json_decode($cli->recv(), true), json_decode($cli->recv(), true)]; 22 Assert::lessThanEq($result[0]['php_time'] - $result[0]['last_dispatch_time'], 0.01); 23 Assert::greaterThanEq($result[1]['php_time'] - $result[1]['last_dispatch_time'], 0.3); 24 $cli->close(); 25 echo "SUCCESS\n"; 26 }); 27 $pm->kill(); 28}; 29 30$pm->childFunc = function () use ($pm) { 31 $serv = new Server(TCP_SERVER_HOST, $pm->getFreePort()); 32 $serv->set([ 33 "worker_num" => 1, 34 'log_file' => '/dev/null', 35 'open_eof_split' => true, 36 'package_eof' => "\r\n", 37 ]); 38 $serv->on("WorkerStart", function (Server $serv) use ($pm) { 39 $pm->wakeup(); 40 }); 41 $serv->on("Receive", function (Server $serv, $fd, $rid, $data) { 42 $info = $serv->getClientInfo($fd); 43 $info ['php_time'] = microtime(true); 44 $serv->send($fd, json_encode($info)); 45 if (trim($data) == 'test1') { 46 usleep(300000); 47 } 48 }); 49 $serv->start(); 50}; 51 52$pm->childFirst(); 53$pm->run(); 54?> 55--EXPECT-- 56SUCCESS 57