swoole_server->task

Ͷ��һ���첽����task_worker���С��˺������������ء�worker���̿��Լ��������µ�����

bool swoole_server::task(mixed $data, int $dst_worker_id = -1) 
$task_id = $serv->task("some data");

���ӣ�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

ע������