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 和 MySQL 开发的 8 个技巧
Oct 09 PHP
PHP脚本的10个技巧(2)
Oct 09 PHP
dedecms系统的广告设置代码 基础版本
Apr 09 PHP
析构函数与php的垃圾回收机制详解
Oct 28 PHP
php图片处理函数获取类型及扩展名实例
Nov 19 PHP
PHP也能干大事 随机函数
Apr 14 PHP
php和editplus正则表达式去除空白行
Apr 17 PHP
PHP中filter函数校验数据的方法详解
Jul 31 PHP
php+flash+jQuery多图片上传源码分享
Jul 27 PHP
PHP机器学习库php-ml的简单测试和使用方法
Jul 14 PHP
php的扩展写法总结
May 14 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 12 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
phpmyadmin操作流程
2006/10/09 PHP
PHP 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
Look And Say 序列php实现代码
2011/05/22 PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
2014/09/24 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
基于Jquery的简单图片切换效果
2011/01/06 Javascript
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
通过BootStrap实现轮播图的实际应用
2016/09/26 Javascript
Vue组件开发初探
2017/02/14 Javascript
Angular2使用Angular CLI快速搭建工程(一)
2017/05/21 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
详解Puppeteer 入门教程
2018/05/09 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
django自带调试服务器的使用详解
2019/08/29 Python
Python如何实现强制数据类型转换
2019/11/22 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
《王二小》教学反思
2014/02/27 职场文书
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
大学计划书范文800字
2014/08/14 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android
CSS元素定位之通过元素的标签或者元素的id、class属性定位详解
2022/09/23 HTML / CSS