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的错误信息
Oct 09 PHP
一个查看session内容的函数
Oct 09 PHP
mysql 的 like 问题,超强毕杀记!!!
Jan 18 PHP
火车采集器 免费版使出收费版本功能实现原理
Sep 17 PHP
在命令行下运行PHP脚本[带参数]的方法
Jan 22 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
Dec 25 PHP
PHP redis实现超迷你全文检索
Mar 04 PHP
详解PHP中的序列化、反序列化操作
Mar 21 PHP
PHP的反射机制实例详解
Mar 29 PHP
Windows下php+mysql5.7配置教程
May 16 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
Laravel框架控制器的request与response用法示例
Sep 30 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计算年龄精准到年月日
2015/11/17 PHP
PHP socket 模拟POST 请求实例代码
2016/07/18 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
jquery dialog键盘事件代码
2010/08/01 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
javascript常见用法总结
2014/05/22 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
详解javascript函数的参数
2015/11/10 Javascript
JS+CSS实现闪烁字体效果代码
2016/04/05 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
2017/12/24 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
Python实现Const详解
2015/01/27 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
pytorch 预训练层的使用方法
2019/08/20 Python
Python调用接口合并Excel表代码实例
2020/03/31 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
生产车间实习自我鉴定
2013/09/23 职场文书
解除劳动合同协议书
2014/04/14 职场文书
运动会班级口号
2014/06/09 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
辞职信标准格式
2015/02/27 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python