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 5.0 Pear安装方法
Dec 06 PHP
Phpbean路由转发的php代码
Jan 10 PHP
谈PHP生成静态页面分析 模板+缓存+写文件
Aug 17 PHP
PHP获取MAC地址的函数代码
Sep 11 PHP
PHP中redis的用法深入解析
Feb 20 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
PHP实现WebService的简单示例和实现步骤
Mar 27 PHP
php析构函数的简单使用说明
Aug 24 PHP
PHP常用设计模式之委托设计模式
Feb 13 PHP
Yii的Srbac插件用法详解
Jul 14 PHP
在Laravel中使用MongoDB的方法示例
Nov 11 PHP
tp5框架使用cookie加密算法实现登录功能示例
Feb 10 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
PHP中Session的概念
2006/10/09 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
Dom在ajax技术中的作用说明
2010/10/25 Javascript
JS鼠标事件大全 推荐收藏
2011/11/01 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
javascript常用的方法分享
2015/07/01 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
js css实现垂直方向自适应的三角提示菜单
2016/06/26 Javascript
基于jQuery制作小图标上下滑动特效
2017/01/18 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
Python中Random和Math模块学习笔记
2015/05/18 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
Python面向对象程序设计示例小结
2019/01/30 Python
python实现的config文件读写功能示例
2019/09/24 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
python连接mysql有哪些方法
2020/06/24 Python
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
文明教师事迹材料
2014/01/16 职场文书
后备干部考察材料
2014/02/12 职场文书
公司晚会策划方案
2014/05/17 职场文书
北京奥运会主题口号
2014/06/13 职场文书
绿色小区申报材料
2014/08/22 职场文书
校长师德表现自我评价
2015/03/04 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫