onTask
��task_worker�����ڱ����á�worker���̿���ʹ��swoole_server_task������task_worker����Ͷ���µ�����
function onTask((swoole_server $serv, int $task_id, int $from_id, string $data));
- $task_id������ID����swoole��չ���Զ����ɣ��������ֲ�ͬ������$task_id��$from_id�����������ȫ��Ψһ�ģ���ͬ��worker����Ͷ�ݵ�����ID���ܻ�����ͬ
- $from_id�������ĸ�worker����
- $data �����������
���ӣ�
/** * This script is forked from db_pool.php * you can test like this, * /usr/local/php/bin/php bench.php -n 1000 -c 100 -s tcp://127.0.0.1:9508 -f short_tcp / long_tcp */ define("SERVER_RELOAD", 'U0VSVkVSX1JFTE9BRAo='); if(!extension_loaded('swoole')){ throw new Exception("install swoole extension, pecl install swoole"); } if(!extension_loaded('redis')) { throw new Exception("install redis extension, pecl install redis"); } $serv = new swoole_server("0.0.0.0", 9508); $serv->set(array( 'worker_num' => 4,//base on you cpu nums 'task_worker_num' => 4,//better equal to worker_num, anyway you can define your own 'heartbeat_check_interval' => 5, 'heartbeat_idle_time' => 5, 'open_cpu_affinity' => 1, 'open_eof_check' => 1, 'package_eof' => "\r\n\r\n", 'package_max_length' => 1024 * 16, //'daemonize' => 1 )); function onStart($serv) { echo "MasterPid={$serv->master_pid}|Manager_pid={$serv->manager_pid}\n"; echo "Server: start.Swoole version is [".SWOOLE_VERSION."]\n"; } function onReceive($serv, $fd, $from_id, $key) { $key = trim($key); if($key === SERVER_RELOAD) { // check if this is a reload cmd $ret = $serv->reload($serv); ($ret === true) ? $serv->send($fd, "reload success\n") : $serv->send($fd, "reload fail\n"); }else { $result = $serv->taskwait($key); if ($result !== false) { list($status, $data) = explode(':', $result, 2); if ($status == 'OK') { $serv->send($fd, $key . " : " . var_export(unserialize($data), true) . "\n"); } else { $serv->send($fd, $data); } return; } else { $serv->send($fd, "Error. Task timeout\n"); } } } function onTask($serv, $task_id, $from_id, $key) { static $redis = null; if ($redis == null) { $redis = new Redis(); $redis->pconnect("127.0.0.1", 6379); if (!$redis) { $redis = null; $serv->finish("ER: Init Redis Fail."); return; } } $data = $redis->get($key); if ($data === false) { $serv->finish("ER: Get Data Fail."); return; } $serv->finish("OK:" . serialize($data)); } function onFinish($serv, $data) { echo "AsyncTask Finish:Connect.PID=" . posix_getpid() . PHP_EOL; } $serv->on('Start', 'onStart'); $serv->on('Receive', 'onReceive'); $serv->on('Task', 'onTask'); $serv->on('Finish', 'onFinish'); $serv->start();
1.7.2��ǰ�İ汾��$data�ij�����ó���8K���˲�����SW_BUFFER_SIZE�����
1.7.2���ϵİ汾��$data�ij��Ȳ������ƣ��������SW_BUFFER_SIZE�����Զ�д����ʱ�ļ�
����ִ�н����worker����
1.7.2���ϵİ汾����onTask������ return�ַ�������ʾ�������ݷ��ظ�worker���̡�worker�����лᴥ��onFinish��������ʾͶ�ݵ�task����ɡ�
1.7.2��ǰ�İ汾����Ҫ����swoole_server->finish()������������ظ�worker����