文档章节

Task_worker 简单流程

304158
 304158
发布于 2017/06/28 11:11
字数 577
阅读 3
收藏 0
点赞 0
评论 0

1.Task_worker_num 

配置task进程的数量,配置此参数后将会启用task功能。所以swoole_server务必要注册onTask/onFinish2个事件回调函数。如果没有注册,服务器程序将无法启动。

function onTask(swoole_server $serv, int $task_id, int $src_worker_id, mixed $data);
/*

    $task_id是任务ID,由swoole扩展内自动生成,
    用于区分不同的任务。$task_id和$src_worker_id组合起来才是全局唯的,
    不同的worker进程投递的任务ID可能会有相同
    $src_worker_id来自于哪个worker进程
    $data 是任务的内容

*/
void onFinish(swoole_server $serv, int $task_id, string $data)

/*
    $task_id是任务的ID
    $data是任务处理的结果内容
task进程会通过swoole_server->finish()方法将任务处理的结果发送给worker进程


*/

例如

Task_worker_num  = 100

Task 任务池中,能够创建100个Task 处理任务.

可以制定要给投递给哪个task进程,传入ID即可,范围是0 - (serv->task_worker_num -1)

Task异步的进程

TaskWaitMulti并发多个Task进程

$tasks[] = mt_rand(1000, 9999); //任务1
$tasks[] = mt_rand(1000, 9999); //任务2
$tasks[] = mt_rand(1000, 9999); //任务3
var_dump($tasks);

//等待所有Task结果返回,超时为10s
$results = $serv->taskWaitMulti($tasks, 10.0);

if (!isset($results[0])) {
    echo "任务1执行超时了\n";
}
if (isset($results[1])) {
    echo "任务2的执行结果为{$results[1]}\n";
}
if (isset($results[2])) {
    echo "任务3的执行结果为{$results[2]}\n";
}

Taskwait 阻塞的进程

<?php


    $serv = new swoole_server("127.0.0.1", 9501);
    $serv->set(array(
        'worker_num' => 4,
        'daemonize' => false,
        'dispatch_mode'=>2,
        'task_worker_num'=>100,

    ));
    //启动服务器
    $serv->on('start',function ($serv) {  //服务器启动回调
            echo "+++++++启动了一个SWOOLE++++++++";

    });
    //服务器启动的Worker进程
    $serv->on('WorkerStart',function ($serv,$worker_id){
        //echo $worker_id."Worker\n";

    });

    $serv->on('connect', function ($serv, $fd){  // 客户端链接服务器回调
        echo "\n====================================\n";
        foreach($serv->connections as $k=>$v)
        {
            var_dump($k,$v);
        }
        echo "====================================\n";


    });

    $serv->on('receive', function ($serv, $fd, $from_id, $data) {//接收到来自客户端信息的回调
        $serv->tick(10000, function() use ($serv, $fd) {

           /* $serv->task("taskcallback", -1, function (swoole_server $serv, $task_id, $data) use($fd) {
                var_dump($task_id, $data);
                $serv->send($fd, $serv->worker_id."task");
            });*/
           $ob = $serv->task("进行一次异步");
            $serv->send($fd, $serv->worker_id."task");

        });

    });

    $serv->on('close', function ($serv, $fd) {//关闭于客户端的链接回调
        echo "ID=".$fd.":一个链接关闭了.\n";
    });



    //task 回调
    $serv->on('task',function ($serv,$task_id,$src_worker_id,$data){
        echo "创建了一个task\n";
        $serv->finish($data);
    });
    //task 任务完成回调
    $serv->on('finish',function ($serv,$task_id,$data){
        echo $data."->>>>>由finish完成传递\n";
    });

        $serv->start();//运行服务

 

© 著作权归作者所有

共有 人打赏支持
304158
粉丝 0
博文 66
码字总数 26817
作品 0
大兴安岭
spark运行模式

Local模式 运行Spark最简单的方法是通过Local模式(即伪分布式模式)。 运行命令为:./bin/run-example org.apache.spark.examples.SparkPi local 基于standalone的Spark架构与作业执行流程 ...

张欢19933 ⋅ 2016/02/18 ⋅ 1

Spark Job 详细执行流程(一)

本文以Spark 1.6 Standalone模式为例,介绍用户提交Spark Job后的Job的执行流程。大体流程如下图所示 Spark集群运行架构 用户提交Job后会生成SparkContext对象,SparkContext向Cluster Manag...

imarch1 ⋅ 2016/03/23 ⋅ 0

Spark(二):简单了解Spark架构与运行逻辑

一:Spark的架构。 1. Driver:运行Application的main()函数并且创建SparkContext。 2. Client:用户提交作业的客户端。 3. Worker:集群中任何可以运行 Application 代码的节点,运行一个或...

牧羊人Berg ⋅ 2016/06/02 ⋅ 0

Java爬虫框架

一、 模块 1. Scheduler Scheduler负责启动爬虫,停止爬虫,监控爬虫的状态。 Scheduler在调度爬虫时,借助于Quartz,设置爬虫在某个时刻启动。同一个名字的爬虫是stateful的。 Task:初始化...

超人学院 ⋅ 2016/07/26 ⋅ 0

swoole项目开发思维转换 -- 长驻内存

从上篇的执行流程,可以得出第一个需要思维转换的点: Swoole是完全的长驻内存的 这个是和web开发第一个很大的不同,之前我们在做web开发,基本不怎么考虑内存控制的问题,这里从两个方面来进...

杨太化 ⋅ 2015/10/15 ⋅ 0

java 中的Fork/Join框架

什么是Fork/Join框架 Fork/Join框架是一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和Join这两个单词来理...

hgfgoodcreate ⋅ 2016/07/03 ⋅ 1

spark架构详解

hadoop和spark Hadoop这项大数据处理技术大概已有十年历史,而且被看做是首选的大数据集合处理的解决方案。MapReduce是一路计算的优秀解决方案,不过对于需要多路计算和算法的用例来说,并非...

张欢19933 ⋅ 2016/02/18 ⋅ 0

Gearman Python接口使用

Gearman是一个分布式任务调度框架,对于Gearman的介绍已有很多,本文主要记录下最近是用Gearman的python接口时遇到的小问题 python-Gearman目前版本2.0.1(http://www.gearman.org/pythoncl...

IUnKnown ⋅ 2013/05/18 ⋅ 0

storm拓扑的并行度(parallelism)概念

1 storm并行的基本概念 一个运行中的拓扑是由什么构成的:工作进程(worker processes),执行器(executors)和任务(tasks) 在一个 Storm 集群中,Storm 主要通过以下三个部件来运行拓扑:...

张欢19933 ⋅ 2016/02/02 ⋅ 0

storm拓扑的并行度(parallelism)概念

1 storm并行的基本概念 一个运行中的拓扑是由什么构成的:工作进程(worker processes),执行器(executors)和任务(tasks) 在一个 Storm 集群中,Storm 主要通过以下三个部件来运行拓扑:...

泡海椒 ⋅ 2016/04/03 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

一张图看懂CDN全站加速产品解决方案

原文链接 本文为云栖社区原创内容,未经允许不得转载。

阿里云云栖社区 ⋅ 11分钟前 ⋅ 0

一张图看懂CDN全站加速产品解决方案

原文链接

猫耳m ⋅ 12分钟前 ⋅ 0

开启Swarm集群以及可视化管理

在搭建的两台coreos服务器上开启swarm集群 前置条件: docker均开启2375端口 同一个局域网内 主服务器上安装Portainer容器 安装Portainer容器执行: docker run -d -p 9000:9000 --restart=a...

ykbj ⋅ 30分钟前 ⋅ 0

单例设计模式

1、单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例 2、饿汉式单例类 在这个类被加载时,静态变量instance会被初始化,此时类的私有构造子会被调用 饿汉式是典型...

职业搬砖20年 ⋅ 35分钟前 ⋅ 0

前端基础(四):前端国际规范收集

字数:1142 阅读时间:5分钟 前言 由于前端技术的灵活性和杂乱性,导致网上的许多解决方案不够全面甚至是完全错误,容易起到误导作用。所以,我对搜索到的解决方案往往是存疑态度。那么,如何...

老司机带你撸代码 ⋅ 37分钟前 ⋅ 0

Failed to open/create Network-VirtualBox Host-Only

虚拟机版本 : Oracle Vm VirtualBox 5.2.12 报错时机:开网卡二,重启虚拟机报错 "Failed to open/create the internal network 'HostInterfaceNetworking-VirtualBox Host-Only Ethernet Ada......

p至尊宝 ⋅ 40分钟前 ⋅ 0

springMVC接收表单时 Bean对象有Double Int Char类型的处理

前台ajax提交表单price为double类型 后台controller就介绍不到 400错误 前台 实体类: public class ReleaseMapIconConfig{ private String id; private long maxValue; private long minVal......

废柴 ⋅ 46分钟前 ⋅ 0

ZOOKEEPER安装

工作需要在ubuntu上配置了一个zookeeper集群,有些问题记录下来。 1. zookeeper以来java,所以首先要安装java。但是ubuntu系统有自带的jdk,需要通过命令切换java版本: $ sudo update-alter...

恰东 ⋅ 49分钟前 ⋅ 0

linux 进程地址空间的一步步探究

我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。 那虚拟内存空间...

HelloRookie ⋅ 49分钟前 ⋅ 0

myatis #{}与${}区别及原理

https://blog.csdn.net/wo541075754/article/details/54292751

李道福 ⋅ 52分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部