php基于 swoole 实现的异步处理任务功能示例


Posted in PHP onAugust 13, 2019

本文实例讲述了php基于 swoole 实现的异步处理任务功能。分享给大家供大家参考,具体如下:

安装swoole:

下载官方swoole压缩包,解压进入目录

$ cd swoole             # 进入 swoole 目录
$ phpize
$ ./configure --with-php-config=/usr/local/php/bin/php-config  #注意查看服务器上是否有这个路径
$ make && make install

修改php.in文件

vi /usr/local/php/lib/php.ini

增加如下内容

extension = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/swoole.so" //版本不同路径可能不同

保存后重启php-fpm

$ /etc/init.d/php-fpm restart

php -m 命令查看是否添加成功 成功则会看到有swoole模块

$ php -m

服务端作为守护进程监控任务,新建server.php:

<?php
$serv = new Swoole\Server("127.0.0.1", 9502);
$serv->set(array('task_worker_num' => 4));
$serv->on('Receive', function($serv, $fd, $from_id, $data) {
  $task_id = $serv->task("Async");
  echo "Dispath AsyncTask: id=$task_id\n";
});
$serv->on('Task', function ($serv, $task_id, $from_id, $data) {
  echo "New AsyncTask[id=$task_id]".PHP_EOL;
  $serv->finish("$data -> OK");
});
$serv->on('Finish', function ($serv, $task_id, $data) {
  echo "AsyncTask[$task_id] Finish: $data".PHP_EOL;
}); 
$serv->start();

用命令行模式打开

php server.php

新建一个client.php

<?php
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
$client->on("connect", function(swoole_client $cli) {
  $cli->send("GET / HTTP/1.1\r\n\r\n");
});
$client->on("receive", function(swoole_client $cli, $data){
  echo "Receive: $data";
  $cli->send(str_repeat('A', 100)."\n");
  sleep(1);
});
$client->on("error", function(swoole_client $cli){
  echo "error\n";
});
$client->on("close", function(swoole_client $cli){
  echo "Connection close\n";
});
$client->connect('127.0.0.1', 9502);

打开一个新的窗口命令行执行

php client.php

执行完后会发现在server.php的窗口就会有信息输出

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
下载文件的点击数回填
Oct 09 PHP
php xml-rpc远程调用
Dec 19 PHP
smarty模板局部缓存方法使用示例
Jun 17 PHP
php中字符集转换iconv函数使用总结
Oct 11 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
Dec 15 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
Dec 24 PHP
PHP直接修改表内容DataGrid功能实现代码
Sep 24 PHP
PHP中的Trait 特性及作用
Apr 03 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
Nov 10 PHP
PHP7基于curl实现的上传图片功能
May 11 PHP
php+ajax实现商品对比功能示例
Apr 13 PHP
PHP实现15位身份证号转18位的方法分析
Oct 16 PHP
thinkphp3.2框架中where条件查询用法总结
Aug 13 #PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 #PHP
php实现的表单验证类完整示例
Aug 13 #PHP
thinkphp3.2同时连接两个数据库的简单方法
Aug 13 #PHP
php实现简单的守护进程创建、开启与关闭操作
Aug 13 #PHP
Laravel如何同时连接多个数据库详解
Aug 13 #PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 #PHP
You might like
javascript中的undefined 与 null 的区别  补充篇
2010/03/17 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
BootStrap glyphicon图标无法显示的解决方法
2016/09/06 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
2016/11/28 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
优雅的在React项目中使用Redux的方法
2018/11/10 Javascript
vue 组件内获取actions的response方式
2019/11/08 Javascript
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
python 实现一个反向单位矩阵示例
2019/11/29 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
2020/01/18 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
2020/02/29 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
python 实现批量图片识别并翻译
2020/11/02 Python
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
《小石潭记》教学反思
2014/02/13 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
学院党委班子四风问题自查报告及整改措施
2014/10/25 职场文书
2014年超市工作总结
2014/11/19 职场文书
2015年消防工作总结
2015/04/24 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
机关单位2016年法制宣传日活动总结
2016/04/01 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis