1--TEST-- 2swoole_server/task: finish timeout 3--SKIPIF-- 4<?php require __DIR__ . '/../../include/skipif.inc'; ?> 5--FILE-- 6<?php 7require __DIR__ . '/../../include/bootstrap.php'; 8 9use Swoole\Server; 10use Swoole\Client; 11 12define('TMP_LOG_FILE', __DIR__ . '/log_file'); 13ftruncate(fopen(TMP_LOG_FILE, 'w+'), 0); 14 15$pm = new SwooleTest\ProcessManager; 16$pm->parentFunc = function ($pid) use ($pm) { 17 $cli = new Client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC); 18 $cli->connect('127.0.0.1', $pm->getFreePort(), 10) or die("ERROR"); 19 $cli->send("task-01") or die("ERROR"); 20 Assert::same($cli->recv(), "hello world"); 21 $cli->close(); 22 echo file_get_contents(TMP_LOG_FILE); 23 $pm->kill(); 24}; 25 26$pm->childFunc = function () use ($pm) { 27 $server = new Server('127.0.0.1', $pm->getFreePort(), SWOOLE_PROCESS); 28 $server->set( 29 [ 30 'log_file' => TMP_LOG_FILE, 31 'log_level' => SWOOLE_LOG_NOTICE, 32 'task_worker_num' => 1, 33 'socket_send_timeout' => 1.0, 34 'worker_num' => 1, 35 'enable_coroutine' => false, 36 ] 37 ); 38 $server->on('workerStart', function () use ($pm) { 39 $pm->wakeup(); 40 }); 41 $server->on('receive', function (Server $server, $fd, $tid, $data) { 42 $server->task($fd); 43 usleep(1100000); 44 }); 45 $server->on( 46 'task', 47 function ($server, $task_id, $worker_id, string $fd) { 48 $n = 200; 49 while ($n--) { 50 if (!$server->finish(str_repeat('A', 8000))) { 51 break; 52 } 53 } 54 $server->send($fd, "hello world"); 55 } 56 ); 57 $server->on('finish', function () { }); 58 $server->on('close', function () { }); 59 $server->start(); 60}; 61$pm->childFirst(); 62$pm->run(); 63unlink(TMP_LOG_FILE); 64?> 65--EXPECTF-- 66[%s] WARNING Socket::send_blocking(): send %d bytes failed, Error: Resource temporarily unavailable[11] 67[%s] WARNING Server::reply_task_result(): send result to worker timed out 68