热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TASK异步进程处理场景

如消息队列,可以把复杂任务异步交给swoole的task进程处理。大数据处理,如发送10000个EMAIL,可以异步交给swoole的ta

如消息队列,可以把复杂任务异步交给swoole的task进程处理。
大数据处理,如发送10000个EMAIL,可以异步交给swoole的task进程处理。

服务端应用程序

CLI 挂载启动服务端程序:php server.php

$serv = new swoole_server('127.0.0.1', 9501);// 配置多少进程处理,传递给task函数是异步的
// 如果配置的是1,task会单进程方式把所有授予的任务依次处理完毕
$serv->set(['task_worker_num' => 1,
]);$serv->on('Connect', function ($serv, $fd) {echo "new client connected." . PHP_EOL;
});$serv->on('Receive', function ($serv, $fd, $fromId, $data) {echo "worker received data: {$data}" . PHP_EOL;// 投递一个任务到task进程中$serv->task($data);// 通知客户端server收到数据了$serv->send($fd, 'This is a message from server.');// 为了校验task是否是异步的,这里和task进程内都输出内容,看看谁先输出echo "worker continue run." . PHP_EOL;
});/*** $serv swoole_server* $taskId 投递的任务id,因为task进程是由worker进程发起,所以多worker多task下,该值可能会相同* $fromId 来自那个worker进程的id* $data 要投递的任务数据*/
$serv->on(&#39;Task&#39;, function ($serv, $taskId, $fromId, $data) {echo "task start. --- from worker id: {$fromId}." . PHP_EOL;for ($i&#61;0; $i <100; $i&#43;&#43;) {sleep(1);echo "task runing. --- {$i}" . PHP_EOL;}echo "task end." . PHP_EOL;
});/*** 只有在task进程中调用了finish方法或者return了结果&#xff0c;才会触发finish*/
$serv->on(&#39;Finish&#39;, function ($serv, $taskId, $data) {echo "finish received data &#39;{$data}&#39;" . PHP_EOL;
});$serv->start();
客户端应用程序

客户端启动发送数据&#xff1a;php client.php

$client &#61; new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);// 随后建立连接&#xff0c;连接失败直接退出并打印错误码
$client->connect(&#39;127.0.0.1&#39;, 9501) || exit("connect failed. Error: {$client->errCode}\n");
// 向服务端发送数据
$client->send("hello server.");
// 从服务端接收数据
$response &#61; $client->recv();
// 输出接受到的数据
echo $response . PHP_EOL;// 关闭连接
$client->close();
本篇总结&#xff1a;

  1. 没有耗时任务的情况下&#xff0c;worker直接运行&#xff0c;无需开启task

  2. 对于耗时的任务&#xff0c;可以在worker内调用task函数&#xff0c;把异步任务投递给task进程进行处理&#xff0c;task进程的数量取决于task_worker_num的配置

  3. task进程内可以选择调用finish方法或者return&#xff0c;来通知worker进程此任务已完成&#xff0c;worker进程会在onFinish回调中对task的执行结果进一步处理。如果worker进程不关心任务的结果&#xff0c;finish就不需要了。


推荐阅读
  • php怎么做rpc通信(RPC通信)
    导读:很多朋友问到关于php怎么做rpc通信的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
  • php设置数组大小_【大厂必备】2020超经典PHP面试题
    结合我自己这段时间的面试情况,面对的一些php面试题列举出来,基本上结合自己的看法回答的,不妥的地方请大家指出去,与大家一起 ... [详细]
  • PHP socket服务端与客户端的简易通信
    今天学习socket通信的同时,顺便整理了下以前初识socket的知识。现在关于php的socket通信,有些框架已经十分成熟了,比如swoole和workerman,这两个大家可以学习学 ... [详细]
  • 这两天开发中要用到swoole的websocket,但是有些没太搞明白 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • gitlab重置password
    ruby没怎么学,自己搭建的gitlab的rootpassword又忘了。幸好看见此帖子,试验okhttp:roland.kierkels.netgitreset-your-git ... [详细]
  • 我尝试使用Vue.js在Laravel中实现imageupload吗?但是,我不知道为什么图像 ... [详细]
  • 电商系统设计艺术——秒杀业务设计
    一、秒杀场景人多货少,只有少量的人能够抢购成功。高并发,秒杀业务在开始之前流量比较平稳,开始后流量会直线性的上升。持续时间短࿰ ... [详细]
  • 【宇润日常疯测007】Swoole 协程与传统 fpm 同步模式比较
    为什么80%的码农都做不了架构师?如果说数组是PHP的精髓,数组玩得不6的,根本不能算是会用PHP。那协程对于Swoole也是同理& ... [详细]
author-avatar
那一年2502931247
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有