PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。
Swoole可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。 使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。一、Swoole框架介绍
swoole是一套设计非常精巧,有效提高开发效率的PHP框架。Swoole有统一的唯一全局对象,类似于Java的注册树,挂载了常用的一些对象,如数据库、模板引擎、缓存系统、日志系统、事件处理系统等。可以很方便地调用功能,快速开发。使用swoole框架,仅需配置一个config.php文件,在其他PHP文件中只需要require config.php文件,即可调用框架的所有功能。
swoole通过配置文件可以实现在轻松更换模块驱动方式。比如数据库连接,可以很方便得在Pdo MySQL MySQLi之间更换。缓存可以用filecache,也可以用dbcache,还可以用memcache。日志可以用数据库日志,也可以用系统日志或文件日志。
代码:
Php代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php require 'config.php' ; //自动加载模块 $php ->autoload( 'db' , 'tpl' , 'cache' , 'log' , 'event' , 'upload' ); //数据库查询 $res = $php ->db->query( 'select * from test' ); $one = $res ->fetch(); $all = $res ->fetchall(); //日志 $php ->log->info( 'hello' ); //缓存 $php ->cache->get( 'cache_key' ); $hello = $php ->cache->set( 'cache_key' , 'me' ,1800); //模板 $php ->tpl->assign( 'hello' , $hello ); $php ->tpl->display( 'index.html' ); |
Swoole提供了很多类库工具,表单生成、输入验证和过滤,登录验证处理,JS生成,Ajax支持,调试工具,客户端操作,URL合并拆分工具等。
另外也提供,网络类(Block、Select、Event的TCP、UDP Server & Client),也提供一些简单的服务器协议实现(HTTP,Chat,FTP,SMTP,POP3等)。还有2个js类库,UI库和表单验证。
二、高级应用
Swoole框架提供了强大的Model类,有get,gets,set,sets,del,dels,put可以非常方便的实现数据库的增删查改,gets接口还有自动分页的功能。
swoole的SQL封装很灵活,它的特色是,所有的SQL拼接都使用数组的方式,而不是对象方法,这样数据库查询参数可以和PHP的$_GET,$_POST,$_SESSION,Cache,Cookie无缝集成。
代码:
Php代码
1 2 3 4 5 6 7 8 9 10 | <?php $model = createModel( 'TestModel' ); $gets [ 'where' ][] = 'id>1' ; $gets [ 'order' ] = 'id desc' ; $gets [ 'limit' ] = 10; $gets [ 'where' ][] = 'category=10' ; $gets [ 'select' ] = 'id,title,name' ]; $gets [ 'leftjoin' ] …. $data = $model ->gets( $gets ); |
Swoole中也有ORM的数据库操作方式,可以参考开发手册。
Swoole MVC URL路由方式,是通过用户提供的函数完成的,用户函数只需要返回具体调用哪个Controller的哪个Method。配合使用url rewrite,可以定制出任意的URL方案,比如/controller/action/ , controller_action.do,controller/action.do等。或者像Django一样完全使用正则来规定URL。
Event
Swoole提供了一个事件触发系统。
$php->event->raise('sendsms',$mobile,$sms_content);
这是一个很酷的设计,如果在本地测试环境中,你可是配置为同步,那么raise引发一个时间后,去执行事件对应的handle函数。如果是服务器环境,可以设置为异步,那么raise只会向Queue服务器投递一个事件。在后台启动一个守护进程,从Queue服务器取得事件,然后再用handle函数去处理。
Upload
swoole可以对上传文件统一处理,限制上传大小。上传图片的话,可以自动压缩图片尺寸,产生缩略图。
三、部署方式和压力测试
普通LAMP方式,由于每次请求包含的php文件较多,最好安装APC等OPCode缓存。压力测试,同样的代码,运行效率略低于thinkphp,但远超CodeIgniter,差不多是2倍以上。
值得一提的是以Server方式运行的Swoole,性能极为强悍。是同样代码Apache部署环境下的将近8-14倍。而且内存占用很少。
代码:
Php代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php require ( 'config.php' ); require (LIBPATH. '/function/cli.php' ); //Mime格式 require (LIBPATH. '/data/mimes.php' ); $mime_types = array_flip ( $mimes ); //静态文件许可 $static_files = array_flip ( array ( 'static' , 'templates' , 'swoole_plugin' , 'favicon.ico' , 'robot.txt' )); $static_access = array_flip ( array ( 'html' , 'htm' , 'jpg' , 'gif' , 'png' , 'js' , 'css' )); //加载全部controller import_all_controller(); $_SERVER [ 'run_mode' ] = 'server' ; $_SERVER [ 'server_driver' ] = 'SelectTCP' ; //BlockTCP,EventTCP,SelectTCP $_SERVER [ 'server_host' ] = '0.0.0.0' ; $_SERVER [ 'server_port' ] = 8888; $_SERVER [ 'server_processor_num' ] = 4; //启用的进程数目 $_SERVER [ 'session_cookie_life' ] = 86400; //保存SESSION_ID的cookie存活时间 $_SERVER [ 'session_life' ] = 1800; $php ->runServer(); |
测试代码:
Php代码
<?php
1 2 3 4 5 6 7 8 9 10 11 | class page extends Controller { function index() { $data = createModel( 'UserInfo' )->get(12)->get(); $this ->swoole->tpl->assign( 'data' , $data ); $html = $this ->swoole->tpl->fetch( 'test.html' ); $time = $this ->showTime(); return $html . $time ; } } |
Shell代码
1 2 3 4 5 | ab -c 100 -n 1000 -k http: //127.0.0.1:8888/page/index/ Requests per second Time per request (mean) Time per request (mean, across all concurrent requests) |
运行方式 |
Swoole EventTCP |
Swoole SelectTCP |
Swoole BlockTCP |
Apache/Prefork |
单进程 |
571.70 [#/sec] 174.916 [ms] 1.749 [ms] |
659.01 [#/sec] 151.743 [ms] 1.517 [ms] |
561.24 [#/sec] 178.178 [ms] 1.782 |
80.57 1241.083 [ms] 12.411 [ms] |
4进程 |
1153.63 [#/sec] 86.683 [ms] 0.867 [ms] |
1010.08 [#/sec] 99.002 [ms] 0.990 [ms] |
1094.58 [#/sec] 91.359 [ms] 0.914 [ms] |
|
在我的Ubuntu下进行测试(Inter core E5300+2G内存,同时有其他软件运行ecilpse,firefox,chrom)。Apache只跑到了 80多RPS。4进程的Swoole Server竟然跑到了惊人的1153RPS。
可以用apache ProxyPass方式,或者是Nginx upstream进行代理分发和负载均衡。
这篇Swoole框架的介绍就先讲到这里,更多相关资讯欢迎前往并吹嘘关注编程学习网了解。
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/7738/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取