1--TEST-- 2swoole_server/task: task queue 3--SKIPIF-- 4<?php require __DIR__ . '/../../include/skipif.inc'; ?> 5--FILE-- 6<?php 7require __DIR__ . '/../../include/bootstrap.php'; 8const N = 2048; 9use Swoole\Server; 10$pm = new SwooleTest\ProcessManager; 11$pm->parentFunc = function ($pid) use ($pm) 12{ 13 $cli = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC); 14 $cli->connect('127.0.0.1', $pm->getFreePort(), 10) or die("ERROR"); 15 $cli->send("task-01") or die("ERROR"); 16 echo $cli->recv(); 17 $cli->close(); 18 $pm->kill(); 19}; 20 21$pm->childFunc = function () use ($pm) 22{ 23 ini_set('swoole.display_errors', 'Off'); 24 $serv = new Server('127.0.0.1', $pm->getFreePort(), SWOOLE_BASE); 25 $serv->set(array( 26 "worker_num" => 1, 27 'task_worker_num' => 1, 28 'log_file' => '/dev/null', 29 )); 30 $serv->on("WorkerStart", function (Server $serv) use ($pm) 31 { 32 $pm->wakeup(); 33 }); 34 $serv->on('receive', function (Server $serv, $fd, $rid, $data) 35 { 36 for ($i = 0; $i < 2048; $i++) 37 { 38 $data = array('id' => $i, 'fd' => $fd, 'data' => RandStr::getBytes(rand(2048, 4096))); 39 if ($serv->task($data) === false) 40 { 41 $serv->send($fd, "ERROR\n"); 42 return; 43 } 44 } 45 }); 46 47 $serv->on('task', function (Server $serv, $task_id, $worker_id, $data) 48 { 49 if ($task_id == 0) 50 { 51 sleep(1); 52 } 53 if ($task_id != $data['id']) 54 { 55 echo "ERROR, $task_id, {$data['id']}\n"; 56 } 57 if ($data['id'] == N - 1) 58 { 59 $serv->send($data['fd'], "OK"); 60 } 61 }); 62 63 $serv->on('finish', function (Server $serv, $fd, $rid, $data) 64 { 65 66 }); 67 $serv->start(); 68}; 69 70$pm->childFirst(); 71$pm->run(); 72?> 73--EXPECT-- 74OK 75