swoole_server->task
Ͷ��һ���첽����task_worker���С��˺������������ء�worker���̿��Լ��������µ�����
bool swoole_server::task(mixed $data, int $dst_worker_id = -1) $task_id = $serv->task("some data");
- $task_id��ȫ�ֲ�Ψһ���ڵ���task��event������Ψһ��task id��Χ 0 - 42��
- $dataҪͶ�ݵ��������ݣ�����Ϊ����Դ����֮�������PHP����
- $dst_worker_id�����ƶ�Ҫ��Ͷ�ݸ��ĸ�task���̣�����ID���ɣ���Χ��0 - serv->task_worker_num
- ����ֵΪ����($task_id)����ʾ�������ID�������finish��Ӧ��onFinish�ص��л�Я��$task_id����
���ӣ�taskʵ��db pool
<?php $serv = new swoole_server("127.0.0.1", 9500); $serv->set(array( 'worker_num' => 1, 'task_worker_num' => 8, //database connection pool 'db_uri' => 'mysql:host=127.0.0.1;dbname=test', 'db_user' => 'root', 'db_passwd' => 'root', // 'task_worker_max'=>100 )); function my_onReceive($serv, $fd, $from_id, $data) { $result = $serv->taskwait($data); if ($result !== false) { list($status, $db_res) = explode(':', $result, 2); if ($status == 'OK') { $serv->send($fd, var_export(unserialize($db_res), true) . "\n"); } else { $serv->send($fd, $db_res); } return; } else { $serv->send($fd, "Error. Task timeout\n"); } } function my_onTask($serv, $task_id, $from_id, $sql) { static $link = null; if ($link == null) { $link = new PDO($serv->setting['db_uri'], $serv->setting['db_user'], $serv->setting['db_passwd']); if (!$link) { $link = null; $serv->finish("ER: connect database failed."); return; } } $result = $link->query($sql); if (!$result) { $serv->finish("ER: query error"); return; } $data = $result->fetchAll(); $serv->finish("OK:" . serialize($data)); } function my_onFinish($serv, $data) { echo "AsyncTask Finish:Connect.PID=" . posix_getpid() . PHP_EOL; } $serv->on('Receive', 'my_onReceive'); $serv->on('Task', 'my_onTask'); $serv->on('Finish', 'my_onFinish'); $serv->start();
$dst_worker_id��1.6.11+����ã�Ĭ��Ϊ���Ͷ��
$task_id�Ǵ�0-42�ڵ��������ڵ�ǰ��������Ψһ��
task����������task�������
�˹������ڽ����ٵ������첽��ȥִ�У�����һ�������ҷ��������������������з��㲥��
���������ʱ����task�����е���$serv->finish("finish")
����worker���̴���������ɡ���Ȼswoole_server->finish
�ǿ�ѡ�ġ�
task�ײ�ʹ��Unix Socket�ܵ�ͨ�ţ���ȫ�ڴ�ģ�û��IO���ġ������̶�д���ܿɴ�100��/s����ͬ�Ľ���ʹ�ò�ͬ�Ĺܵ�ͨ�ţ�����������ö�ˡ�
AsyncTask������1.6.4�汾���ӣ�Ĭ�ϲ���task���ܣ���Ҫ���ֹ�����task_worker_num����˹���
task_worker��������swoole_server::set�����е�������task_worker_num => 64����ʾ��64�������������첽����
swoole_server_task��swoole_server_finish�ڰ汾swoole-1.7.16-stable����$data�ij��ȿ��Գ���8K�� �˲�����SW_BUFFER_SIZE����� ������8k������Ĭ������/tmp��Ϊ��ʱ�洢
����
swoole_server->task/taskwait/finish 3�������������$data
���ݳ���8Kʱ��������ʱ�ļ������档����ʱ�ļ����ݳ��� server->package_max_length
ʱ�ײ���׳�һ�����档
WARN: task package is too big.
server->package_max_length Ĭ��Ϊ2M
ע������
- ʹ��swoole_server_task����ΪServer����onTask�ص�������
swoole_server->start
��ʧ��,onFinish�ص���ѡ��task������ɺ����onFinish�ص� - task�����Ĵ�������С��onTask�����ٶȣ����Ͷ��������������������task������������������worker���̷���������worker���̽��������µ�����