2019-5-18 swoole消息队列

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值