注释可以忽略不计 个人加的 可能会有错误 别误导大家。。。
server端
<?php
class Server
{private $serv;public function __construct() {$this->serv = new swoole_server("0.0.0.0", 9501);$this->serv->set(array('worker_num' => 8,'daemonize' => false,'max_request' => 10000,'dispatch_mode' => 2,'debug_mode'=> 1,'task_worker_num' => 8,//假设为1后面的task 要排队 如果多一些可以同时处理/*单个task的处理耗时,如100ms,那一个进程1秒就可以处理1/0.1=10个task
task投递的速度,如每秒产生2000个task
2000/10=200,需要设置task_worker_num => 200,启用200个task进程*/));$this->serv->on('Start', array($this, 'onStart'));$this->serv->on('Connect', array($this, 'onConnect'));$this->serv->on('Receive', array($this, 'onReceive'));$this->serv->on('Close', array($this, 'onClose'));// bind callback$this->serv->on('Task', array($this, 'onTask'));$this->serv->on('Finish', array($this, 'onFinish'));$this->serv->start();}public function onStart( $serv ) {echo "Start\n";}public function onConnect( $serv, $fd, $from_id ) {echo "Client {$fd} connect\n";}public function onReceive( swoole_server $serv, $fd, $from_id, $data ) {echo "Get Message From Client {$fd}:{$data}\n";// send a task to task worker.$param = array('fd' => $fd);$serv->task( json_encode( $param ) );echo "Continue Handle Worker\n";}public function onClose( $serv, $fd, $from_id ) {echo "Client {$fd} close connection\n";}//function onTask(swoole_server $serv, int $task_id, int $src_worker_id, mixed $data);public function onTask($serv,$task_id,$from_id, $data) {echo "This Task {$task_id} from Worker {$from_id}\n";echo "Data: {$data}\n";for($i = 0 ; $i < 10 ; $i ++ ) {sleep(1);echo "Taks {$task_id} Handle {$i} times...\n";}$fd = json_decode( $data , true )['fd'];$serv->send( $fd , "Data in Task {$task_id}");return "Task {$task_id}'s result";//这个是返回给 onfinsh里 的结果 就是$data}public function onFinish($serv,$task_id, $data) {echo "Task {$task_id} finish\n";echo "Result: {$data}\n";}
}
$server = new Server();/*
Continue Handle Worker
This Task 0 from Worker 7
Data: {"fd":1}
Taks 0 Handle 0 times...
Taks 0 Handle 1 times...
Taks 0 Handle 2 times...
Taks 0 Handle 3 times...
Taks 0 Handle 4 times...
Taks 0 Handle 5 times...
Taks 0 Handle 6 times...
Taks 0 Handle 7 times...
Taks 0 Handle 8 times...
Taks 0 Handle 9 times...
Task 0 finish
Result: Task 0's result*/
?>

client:

<?php
class Client
{private $client;public function __construct() {$this->client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);$this->client->on('Connect', array($this, 'onConnect'));$this->client->on('Receive', array($this, 'onReceive'));$this->client->on('Close', array($this, 'onClose'));$this->client->on('Error', array($this, 'onError'));}public function connect() {$fp = $this->client->connect("127.0.0.1", 9501 , 1);if( !$fp ) {echo "Error: {$fp->errMsg}[{$fp->errCode}]\n";return;}}public function onReceive( $cli, $data ) {echo "Get Message From Server: {$data}\n";}public function onConnect( $cli) {fwrite(STDOUT, "Enter Msg:");//输出到终端 //bool swoole_event_add(mixed $sock, mixed $read_callback, mixed $write_callback = null,int $flags = null);/*swoole_event_add函数用于将一个socket加入到底层的reactor事件监听中。此函数可以用在Server或Client模式下。 函数原型:*/swoole_event_add(STDIN, function($fp){//输入 假设底层是io多路复用 监听输入描述符global $cli;//设置全局 不然会报错fwrite(STDOUT, "Enter Msg:");$msg = trim(fgets(STDIN)); //去除输入的空格$cli->send( $msg );// 然后发送消息。。。});}//public function onClose( $cli) {echo "Client close connection\n";}public function onError() {}public function send($data) {$this->client->send( $data );}public function isConnected() {return $this->client->isConnected();}}
$cli = new Client();
$cli->connect();

一些补充说明

onTask回调中,我们通过task_id和from_id(也就是worker_id)来区分不同进程投递的不同task。当一个task执行结束后,通过return一个字符串将执行结果返回给Worker进程。Worker进程将通过onfinsh回调函数接收这个处理结果。

swoole task 异步任务 注释请忽略 自己加的不一定对 别误导大家。。。。。。相关推荐

  1. mysql异步task_EasySwoole高性能task异步任务

    EasySwoole高性能task异步任务 羡仙. • 2019 年 06 月 20 日 和上一篇一样也是遗漏的重要文章,我太聪明了,这都能发现...他们都有共同的特征:笔记里的开头在上一篇...不管 ...

  2. thinkphp5 异步调用方法_详解thinkphp5+swoole实现异步邮件群发(SMTP方式)

    本文介绍了thinkphp5+swoole实现异步邮件群发(SMTP方式),分享给大家,具体如下: 1.环境说明 阿里云centos7 thinkphp5.0.11 swoole2.0.8 2.tp实 ...

  3. Playwright 模拟浏览器、模拟手机、忽略图片加载、等待、监听、操作事件

    Playwright 是微软开源的自动化UI测试工具,支持Chrome.Firefox.Edge等多种浏览器,兼容多种语言.多种操作系统. 安装 pip install pytest-playwrig ...

  4. 异步处理函数async_Spring @Async异步处理注释

    异步处理函数async Spring @Async annotation allows us to create asynchronous methods in spring. Let's explo ...

  5. swoole task MySQL连接池

    参考 https://blog.csdn.net/ldy3243942/article/details/40596547 上一章中我简单讲解了如何开启和使用Task功能.这一节,我将提供一个Task的 ...

  6. thinkphp5 异步调用方法_thinkphp5 swoole 执行异步任务

    目录结构: 服务器端: /* *author:hdj */ namespace app\Console; use think\console\Command; use think\console\In ...

  7. Swoole Task任务使用

    Swoole 异步Task,主要实现调用异步任务的执行. 常用的场景:异步支付处理.异步订单处理.异步日志处理.异步发送邮件/短信等. Swoole 的实现方式是 worker 进程处理数据请求,分配 ...

  8. tp5 异步处理_tp5.1 swoole 实现异步处理

    客户端请求: namespace app\index\controller; class Index { public function index() { $client = new \swoole ...

  9. Swoole同步/异步/阻塞/非阻塞的理解

    说明总结 同步异步:说的是kernel返回处理信息的方法策略 针对程序中碰到耗时任务时,传递给Kernel  Kernel处理信息的方式  有异步api函数是异步 没的话是同步 IO立即返回:主函数中 ...

最新文章

  1. java acm 母牛的故事_acm母牛的故事 的问题
  2. 拉杰尔安卓服务器注册上限,拉结尔多开养小号刷副本 用多多云手机离线能升级...
  3. php substr的用法,PHP中substr函数如何使用?
  4. hbase启动报错Permission denied: user=xxx, access=WRITE, inode=“/HBase/MasterProcWALs“:root:supergroup:d
  5. Visual Studio 2010 Ultimate敏捷利剑:详解Scrum
  6. RHEL7 修改SSH默认端口
  7. S5PV210裸机之时钟
  8. matlab与r语言运算速度,R语言与matlab循环时间对比
  9. java软件测试方法有哪些方法有哪些方法_软件测试方法和软件测试规则
  10. Linux tcp_timestamps相关
  11. 当新建css样式时默认名,网页制作考题2
  12. VMware Ubuntu安装详细过程(非常靠谱)
  13. 日系插画学习笔记(二):结构与透视
  14. 2021-05-11 MongoDB面试题 分析器在MongoDB中的作用是什么
  15. python画地图柱状图_Python 如何画出漂亮的地图?
  16. 递归算法到非递归算法的转换
  17. H5图片高度根据宽度自适应
  18. 人物角色(Persona)
  19. vuecli相关命令
  20. HDU-1495-非常可乐

热门文章

  1. Stanford CS230深度学习(六)目标检测、人脸识别和神经风格迁移
  2. 性能测试:性能测试指标评估方法
  3. 【十八】文件译文:graph.js.fmkr (测试报告模版配置文件)
  4. java 根号_没见过的 Java 入门教程之三!例程使用中文标识符代码:各种变量
  5. 若依如何配置允许跨域访问?
  6. 正确中断java线程
  7. getresourceasstream 路径_Java 获取资源文件路径
  8. python中字典和json的区别_详解python中的json和字典dict
  9. Java中提取字符串中的数字
  10. IDEA中Maven项目中界面右边的Maven Projects窗口找不到不出来