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 相关文章推荐
php xml留言板 xml存储数据的简单例子
Aug 24 PHP
apache mysql php 源码编译使用方法
May 03 PHP
探讨PHP JSON中文乱码的解决方法详解
Jun 06 PHP
php中stream(流)的用法
Mar 25 PHP
php邮件发送的两种方式
Apr 28 PHP
php bootstrap实现简单登录
Mar 08 PHP
php中使用websocket详解
Sep 23 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
php常用的工具开发整理
Sep 26 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 18 PHP
PHP中echo与print区别点整理
Mar 09 PHP
PHP命令行与定时任务
Apr 01 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
用文本文件实现的动态实时发布新闻的程序
2006/10/09 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
2019/05/09 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
JS弹出可拖拽可关闭的div层完整实例
2015/02/13 Javascript
深入探讨JavaScript String对象
2015/03/09 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
jQuery Validate验证框架经典大全
2015/09/23 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
vue实现2048小游戏功能思路详解
2018/05/09 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
在Python中使用__slots__方法的详细教程
2015/04/28 Python
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
Python日志模块logging基本用法分析
2018/08/23 Python
python实现贪吃蛇小游戏
2020/03/21 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
2020/09/01 Python
python 装饰器重要在哪
2021/02/14 Python
June Jacobs尊积帕官网:知名的spa水疗护肤品牌
2019/03/21 全球购物
土木工程实习生自我鉴定
2013/09/19 职场文书
项目副经理岗位职责
2013/12/30 职场文书
临时工聘用合同协议书
2014/10/29 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
会计专业求职信范文
2015/03/19 职场文书
执行力心得体会范文
2016/01/11 职场文书
导游词之苏州寒山寺
2019/12/05 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python