queue
1跨进程(不需要亲缘关系、可不是父子进程)
2跨语言(php和C通讯)
3不是共享内存,而是消息传递。数据获取后消失。
4msg_send、msg_receive(默认阻塞也可不阻塞)
5特点:快。局限性:单机
6swoole的task进程允许其他程序投递,c语言或传统fpm投递到task。https://wiki.swoole.com/wiki/page/212.html
swoole已经封装好了接口类。
接口类使用方法:
<?php
$server=new Swoole\Server("0.0.0.0",9801);
$key=ftok(__DIR__,1);
echo $key;
$server->set([
'worker_num'=>1, //设置进程
'task_worker_num'=>1, //task进程数
'task_ipc_mode'=>2,
'message_queue_key'=>$key,
'open_length_check'=>1,
'package_length_type'=>'N',//设置包头的长度
'package_length_offset'=>0, //包长度从哪里开始计算
'package_body_offset'=>4, //包体从第几个字节开始计算
]);
$server->on('start',function (){});
$server->on('workerStart',function ($server,$fd){});
$server->on('connect',function ($server,$fd){});
$server->on('receive',function (swoole_server $server, int $fd, int $reactor_id, string $data){
$server->task($data);
});
$server->on('task',function ($server,$task_id,$form_id,$data){
var_dump($server->worker_id);
echo "任务来自于:$form_id".",任务id为{$task_id}".PHP_EOL;
$server->finish("执行完毕");
});
$server->on('finish',function ($server,$task_id,$data){});
$server->on('close',function (){});
$server->start();
运行server,第4行代码打印出key,将key复制粘贴到接口类的
$task = new SwooleTask(这里, 1);
,运行接口类,即投递到server的task。