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���̽��������µ�����