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文件的实现方法
Mar 19 PHP
php discuz 主题表和回帖表的设计
Mar 13 PHP
一步一步学习PHP(2)――PHP类型
Feb 15 PHP
php与paypal整合方法
Nov 28 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
apache php模块整合操作指南
Nov 16 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
Apr 08 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
php创建多级目录的方法
Mar 24 PHP
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
Jan 09 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
php中Swoole的热更新实现代码实例
Mar 04 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
Zend引擎的发展 [15]
2006/10/09 PHP
PHP输出控制功能在简繁体转换中的应用
2006/10/09 PHP
PHP编写RESTful接口
2016/02/23 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
jquery事件机制扩展插件 jquery鼠标右键事件
2011/12/21 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
2016/12/29 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
JS按条件 serialize() 对应标签的使用方法
2017/07/24 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
jQuery ajax仿Google自动提示SearchSuggess功能示例
2019/03/28 jQuery
微信小程序云开发之新手环境配置
2019/05/16 Javascript
jQuery操作元素追加内容示例
2020/01/10 jQuery
Python用GET方法上传文件
2015/03/10 Python
Python中的面向对象编程详解(上)
2015/04/13 Python
Python数据结构之翻转链表
2017/02/25 Python
python通过opencv实现批量剪切图片
2017/11/13 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
敬老月活动总结
2014/08/28 职场文书
七年级地理教学计划
2015/01/22 职场文书
物业工程部岗位职责
2015/02/11 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸