<?php
//tcp协议
$server=new Swoole\Server("0.0.0.0",9800); //创建server对象
//task_ipc_mode设置Task进程与Worker进程之间通信的方式。
//1, 使用Unix Socket通信,默认模式
//2, 使用消息队列通信
//3, 使用消息队列通信,并设置为争抢模式
//参考连接:https://wiki.swoole.com/wiki/page/296.html
//指定消息队列的key,指定之后,当服务器关闭再拉起之后,会自动根据key值继续消费队列。未消费的队列数据存储在服务器tmp临时文件夹中,
$key=ftok(__DIR__,1);
echo $key;
$server->set([
'worker_num'=>1, //设置进程
'task_worker_num'=>1, //task进程数
'task_ipc_mode'=>2,
'message_queue_key'=>$key,
]);
$server->on('start',function (){
});
$server->on('Shutdown',function (){
echo "正常关闭";
});
$server->on('workerStart',function ($server,$fd){
//include 'index.php';
if($server->taskworker){
echo 'task_worker:'.$server->worker_id.PHP_EOL;
}else{
echo 'worker:'.$server->worker_id.PHP_EOL;
}
});
//监听事件,连接事件
$server->on('connect',function ($server,$fd){
//echo "新的连接进入xxx:{$fd}".PHP_EOL;
});
//消息发送过来
$server->on('receive',function (swoole_server $server, int $fd, int $reactor_id, string $data){
//var_dump("消息发送过来:".$data);
//不需要立刻马上得到结果的适合task
$data=['tid'=>time()];
//Task传递数据的大小
//数据小于8k直接通过管道传递,数据大于8k写入服务器tmp临时文件传递
//onTask会读取这个文件,把他读出来
//这里为了测试方便,我们写了1MB数据
$data=str_repeat("a",1*1024*1024);
$server->task($data); //投递到taskWorker进程组,后面加taskwork_id表示指定投递到某个task进程,范围是0 - (serv->task_worker_num -1),参考连接:https://wiki.swoole.com/wiki/page/134.html
echo '异步非阻塞'.PHP_EOL;
//服务端
});
//ontask事件回调
$server->on('task',function ($server,$task_id,$form_id,$data){
var_dump($server->worker_id);
echo "任务来自于:$form_id".",任务id为{$task_id}".PHP_EOL;
try{
}catch (\Exception $e){
//$server->sendMessage();
}
sleep(10);
$server->finish("执行完毕");
});
$server->on('finish',function ($server,$task_id,$data){
//echo "任务{$task_id}执行完毕:{$data}".PHP_EOL;
// var_dump(posix_getpid());
//$server->send($data['fd'], "任务执行完毕");
});
//消息关闭
$server->on('close',function (){
//echo "消息关闭".PHP_EOL;
});
//服务器开启
$server->start();
查看消息队列的命令:ipcs -q
11.task任务投递
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Swoft的任务功能基于Swoole的Task机制,或者说Swoft的Task机制本质就是对SwooleTask机...
- 注:从别人博客借鉴过来的,纯属自学用 http://blog.sina.com.cn/s/blog_6262a50...
- 通常我们在开发中会有这样的需要:让用户跳转到特定的activity页面。一个典型的案例是通知栏点击启动应用程序并跳...