您的位置:网站主页> PHP教程 > PHP Web开发框架Swoole讲解

PHP Web开发框架Swoole讲解

时间:2018-05-07 23:00:01   编辑:一切随缘   文章来源: 已阅读:404 次

编程入门教程[www.ask186.com]网站介绍 

    编程入门教程主要涉及WEB开发领域,主要为广大WEB开发人员提供最新的WEB开发资讯信息,包含php教程mysql教程php面试题在线调色板php学习以及常用( Amazon ApiGoogle Api)等API、爱问资源共享HTML转JS不显示xml...[详细]
广告投放: 编程入门教程:www.ask186.com 电话:15818865556

        PHP Web开发框架Swoole讲解

        Swoole框架介绍:

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

         Swoole提供了很多类库工具,表单生成、输入验证和过滤,登录验证处理,JS生成,Ajax支持,调试工具,客户端操作,URL合并拆分工具等。

        另外也提供,网络类(Block、Select、Event的TCP、UDP Server & Client),也提供一些简单的服务器协议实现(HTTP,Chat,FTP,SMTP,POP3等)。还有2个js类库,UI库和表单验证。
         
        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框架也提供了MVC的apps结构。通过contoller的继承,实现业务逻辑的封装,model的继承,实现数据操作的封装,view层使用smarty模板引擎实现页面显示的逻辑封装。

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

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

        代码:

        <?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可以对上传文件统一处理,限制上传大小。上传图片的话,可以自动压缩图片尺寸,产生缩略图。

        三、部署方式和压力测试

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

        普通LAMP方式,由于每次请求包含的php文件较多,最好安装APC等OPCode缓存。压力测试,同样的代码,运行效率略低于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;
            }
        }

        Shell代码

        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)

        在我的Ubuntu下进行测试(Inter core E5300+2G内存,同时有其他软件运行ecilpse,firefox,chrom)。Apache只跑到了 80多RPS。4进程的Swoole Server竟然跑到了惊人的1153RPS。

         

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

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

  • 上一篇:
  • 下一篇:

本文地址:http://www.ask186.com/content/article/php/30660.html(转载请保留)

相关关键词搜索:PHP,Web,Swoole,讲解

发表评论
      
* 以上用户言论只代表其个人观点,不代表www.ask186.com网站的观点或立场
推荐文档更多
编程入门教程 | PHP教程 | Mysql教程 | Apache教程 | 最新文章 | PHP面试题| 网站地图 | Google地图 | Baidu地图 | 在线WEB论坛| 中纪委反腐最新消息

WEB技术QQ交流群:151963186 站长Q号:547214413
版权所有者:编程入门教程 地址:云南省文山州砚山县盘龙乡 滇ICP备12002707号-1
特别声明:本站内容仅供参考,不作为设计及确切依据!想了解更多,可立即进入Bbs提问