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数据库信息代码
Mar 12 PHP
php 更新数据库中断的解决方法
Jun 05 PHP
Apache2中实现多网站域名绑定的实现方法
Jun 01 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
May 07 PHP
php Calender(日历)代码分享
Jan 03 PHP
php中的curl使用入门教程和常见用法实例
Apr 10 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
Jul 28 PHP
PHP图片处理之图片旋转和图片翻转实例
Nov 19 PHP
php实现博客,论坛图片防盗链的方法
Oct 15 PHP
详解PHP中的外观模式facade pattern
Feb 05 PHP
PHP绕过open_basedir限制操作文件的方法
Jun 10 PHP
PHP队列场景以及实现代码实例详解
Feb 26 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
打造计数器DIY三步曲(中)
2006/10/09 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
微信小程序滑动选择器的实现代码
2018/08/10 Javascript
Element Input组件分析小结
2018/10/11 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
Vue实现图片轮播组件思路及实例解析
2020/05/11 Javascript
python实现web方式logview的方法
2015/08/10 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
Servlet面试题库
2015/07/18 面试题
亲戚结婚的请假条
2014/02/11 职场文书
会计求职自荐信
2015/03/26 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
庆祝教师节主题班会
2015/08/17 职场文书