阅读更多

21顶
3踩

编程语言

原创新闻 Swoole-真正的PHP Web开发框架

2011-05-13 16:13 by 正式记者 matyhtf 评论(28) 有62116人浏览

一、Swoole框架介绍

swoole是一套设计非常精巧,有效提高开发效率的PHP框架。Swoole有统一的唯一全局对象,类似于Java的注册树,挂载了常用的一些对象,如数据库、模板引擎、缓存系统、日志系统、事件处理系统等。可以很方便地调用功能,快速开发。使用swoole框架,仅需配置一个config.php文件,在其他PHP文件中只需要require config.php文件,即可调用框架的所有功能。

swoole通过配置文件可以实现在轻松更换模块驱动方式。比如数据库连接,可以很方便得在Pdo MySQL MySQLi之间更换。缓存可以用filecache,也可以用dbcache,还可以用memcache。日志可以用数据库日志,也可以用系统日志或文件日志。

代码:

<?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合并拆分工具等。

另外也提供,网络类(BlockSelectEventTCPUDP Server & Client),也提供一些简单的服务器协议实现(HTTP,Chat,FTP,SMTP,POP3)。还有2js类库,UI库和表单验证。

二、高级应用

Swoole框架也提供了MVCapps结构。通过contoller的继承,实现业务逻辑的封装,model的继承,实现数据操作的封装,view层使用smarty模板引擎实现页面显示的逻辑封装。

Swoole框架提供了强大的Model类,有get,gets,set,sets,del,dels,put可以非常方便的实现数据库的增删查改,gets接口还有自动分页的功能。

swooleSQL封装很灵活,它的特色是,所有的SQL拼接都使用数组的方式,而不是对象方法,这样数据库查询参数可以和PHP$_GET$_POST$_SESSIONCacheCookie无缝集成。

代码:

 

<?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.docontroller/action.do等。或者像Django一样完全使用正则来规定URL

Event

Swoole提供了一个事件触发系统。

$php->event->raise('sendsms',$mobile,$sms_content);

这是一个很酷的设计,如果在本地测试环境中,你可是配置为同步,那么raise引发一个时间后,去执行事件对应的handle函数。如果是服务器环境,可以设置为异步,那么raise只会向Queue服务器投递一个事件。在后台启动一个守护进程,从Queue服务器取得事件,然后再用handle函数去处理。

Upload

swoole可以对上传文件统一处理,限制上传大小。上传图片的话,可以自动压缩图片尺寸,产生缩略图。

三、部署方式和压力测试

Swoole框架可以像正常的PHP一样方式部署于典型的LAMP环境。也可以采用Swoole本身提供的Http Server方式运行。

普通LAMP方式,由于每次请求包含的php文件较多,最好安装APCOPCode缓存。压力测试,同样的代码,运行效率略低于thinkphp,但远超CodeIgniter,差不多是2倍以上。

值得一提的是以Server方式运行的Swoole,性能极为强悍。是同样代码Apache部署环境下的将近8-14倍。而且内存占用很少。

代码:

<?php
require('config.php');
define('SESSION_CACHE','file://localhost#sess');
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
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;
    }
}
 

 

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只跑到了 80RPS4进程的Swoole Server竟然跑到了惊人的1153RPS

 

可以用apache ProxyPass方式,或者是Nginx upstream进行代理分发和负载均衡。

四、源代码

Swoole框架已经有3年的历史,从08年开始,到现在经历了多个版本的升级。目前也不少成功运用的案例。但参与的PHP程序员不是很多,并没有广为人知。

源代码托管于:http://code.google.com/p/swoole/

期待大家一起参与研究!

 

21
3
评论 共 28 条 请登录后发表评论
8 楼 paramore 2011-05-14 10:48
靠 国产的吧
7 楼 renzhen 2011-05-14 09:57
Server模式真的很有创意,解决了PHP运行框架导致性能严重下降的问题,不过PHP始终不是为long running的程序准备,内存泄露,进程稳定性在这个模式下马上就会凸显,而且没有人会去解决这些问题。
不过这种模式为PHP支持Comet技术提供的可能性,异步IO+长连接在HTML 5 websocket成熟后慢慢成为主流的。而目前的PHP cgi模式下是不支持的。
虽然这个框架未必会被很多人使用,但它的思想和作品,的确可以说是PHP里‘真正’的框架。
6 楼 pochonlee 2011-05-14 01:01
matyhtf 写道
flyinweb 写道
杯具,跟Yii比没发现优点。

和Yii就不是一类。Yii就是用java的方式做PHP,上手难,代码复杂。swoole框架,绝对是PHP的方式,简单,上手非常快,不出1周可以全部掌握。

那个CI这种比呢?因为CI这种怎么写都可以。
5 楼 achun 2011-05-13 22:17
首先向作者致敬,New BSD License,完备的架构思想,已经实现的代码,配得上真正2字
4 楼 netstu 2011-05-13 21:01
一看标题就知道是中国人开发的,要不然不会有这样的标题
3 楼 matyhtf 2011-05-13 16:55
flyinweb 写道
杯具,跟Yii比没发现优点。

和Yii就不是一类。Yii就是用java的方式做PHP,上手难,代码复杂。swoole框架,绝对是PHP的方式,简单,上手非常快,不出1周可以全部掌握。
2 楼 matyhtf 2011-05-13 16:38
Server模式有很多优点。
数据库连接,memcache连接等不再是请求完成之后释放。很多全局对象也不再请求完成释放。而且可以写更重的类,不必担心过度生成释放。
1 楼 flyinweb 2011-05-13 16:34
杯具,跟Yii比没发现优点。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • swoole分布式全栈框架web开发增强版基于SwooleDistributed

    swoole 分布式全栈框架 web开发增强版,基于SwooleDistributed

  • Flash 中 oop 的设计模式

    转自会飞的Blog ,但不知道出处和作者,也就没有转载到蓝色理想,先做收藏。有人问我flash的as应该怎么写,我可以很负责任地告诉他,想怎么写就怎么写,因为as以及flash内部的构成模式决定了它的高度自由化。理论上来说,用按钮的on事件,加上stop(),play(),gotoAndStop(),gotoAndPlay(),就可以实现一个flash里大部分的逻辑关系,而且源代码简单易懂。但是大

  • 基于swoole实现的自带httpserver的web开发框架

    基于swoole实现的自带http server的web开发框架,用于开发高性能的api应用,例如app接口服务端等

  • laravel-swoole-tutorial:Laravel + Swoole

    Laravel通过减轻许多Web项目中使用的常见任务来减轻开发工作的痛苦,例如: 。 。 用于和存储的多个后端。 富有表现力,直观的 。 数据库不可知。 。 。 Laravel易于访问,功能强大,并提供大型,强大的...

  • app-web:一个基于Swoole的php Web框架

    Kovey Web Framework 1.0 描述 这是一个基于swoole的php web框架 用法 composer create-project kovey/app-web

  • FastD是一个支持Swoole的轻量级Web开发框架

    FastD 是一个支持 Swoole 的轻量级 Web 开发框架,可适用于对性能有要求的 API 场景,并且灵活的扩展性可以让开发者们更容易地建造自己的服务 (基于Swoole)

  • FastSwoole基于swoole扩展开发的高性能web框架

    基于php swoole扩展,具有天生高性能优势的Web框架

  • Swoole介绍-真正的PHP Web开发框架

    swoole是一套设计非常精巧,有效提高开发效率的PHP框架。Swoole有统一的唯一全局对象,类似于Java的注册树,挂载了常用的一些对象,如数据库、模板引擎、缓存系统、日志系统、事件处理系统等。可以很方便地调用功能...

  • swoole php7 wrapper,Swoole-1.7.22 版本已发布,修复PHP7相关问题

    swoole-1.7.22 版本已发布,此版本是一个BUG修复版本,专门针对PHP7做了大量修改,可完美运行于PHP7环境swoole-1.7.22 版本已发布,此版本是一个BUG修复版本,专门针对PHP7做了大量修改,可完美运行于PHP7环境。...

  • PHP高级Web开发框架Swoole深入解读+实战案例

    PHP高级Web开发框架,Swoole深入解读+IM在线即时通讯案例视频教程下载。Swoole是一种PHP高级Web开发框架,框架不是为了提升网站的性能,是为了提升网站的开发效率。最少的性能损耗,换取最大的开发效率。利用Swoole...

  • php job框架,swoole-jobs

    加速后端耗时服无需像gearman一个worker配置一条crontab,swoole-jobs负责管理所有worker状态独立的swoole http api 入队列,api不依赖php-fpm1. 说明web中较慢的逻辑,比如统计/email/短信/图片处理等;支持redi...

  • php开源商城系统,基于swoole、easyswoole框架开发.zip

    软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发Node.js、C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...

  • swoole和php-fpm的区别,swoole为何比fpm快_PHP开发框架教程

    PHP-FPM初期版本的 PHP 并没有内置的 WEB 服务器,而是供应了 SAPI(Server API)给第三方做对接。... (引荐进修: swoole视频教程)比方 Nginx + php-fpm 的组合,这类体式格局运转的 fpm 是 Master/Worker 形式,启...

  • 使用Swoole代替Web服务器运行Laravel框架

    一个非常大的好处就是高性能,如果使用普通的web服务器,每次运行 PHP 脚本的时候,PHP都需要初始化模块并为你的运行环境启动Zend引擎。并且将 PHP 脚本编译为 OpCodes 交给 Zend引擎执行。这样就意味着每次HTTP请求...

  • php-swoole-安装环境 (一)

    目录  php-swoole-安装环境 (一) swoole是什么?:  swoole有什么功能?  swoole是什么?:  swoole有什么功能?  swoole如何使用? 验证swoole    ...

  • 真正的PHP Web开发框架之Swoole,你真的知道吗?!

    swoole是一套设计非常精巧,有效提高开发效率的PHP框架。Swoole有统一的唯一全局对象,类似于Java的注册树,挂载了常用的一些对象,如数据库、模板引擎、缓存系统、日志系统、事件处理系统等。可以很方便地调用功能...

  • 基于php的完整商城系统,采用swoole、easyswoole框架开发.zip

    基于PHP、MySQL等技术构建的web系统,框架,PHP学习,课程设计作业,可用于毕业设计,源码项目,可直接运行,实测! 基于PHP、MySQL等技术构建的web系统,框架,PHP学习,课程设计作业,可用于毕业设计,源码项目,...

  • swoole-加速laravel框架

    在swoole中可以为我们提供http服务,http服务既可以用于我们日常的web开发中,同时它也可以对thinkphp、laravel等框架进行加速,但要使用swoole对常规框架加速,该框架必须是IOC类型的才可以,这是因为swoole是常驻...

  • PHP-FPM vs Swoole - 学习/实践

    「实际上,还要处理一些超全局变量的问题,需要在每次接收新请求时,将这些超全局变量还原等, 具体可以参见:swoole 适配一些php-fpm web开发框架的适配,如thinkphp,laravel,yii 推荐看下:swoole (P1....

Global site tag (gtag.js) - Google Analytics