欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。由于本站位于香港虚拟主机,故速度比较慢。

文摘  PHP Swoole框架快速入门

PHP框架 网络 259 0评论

swoole有两个部分。 一个是PHP扩展,用C开发的,这是核心。 另一个是框架,像yii、TP、Laravel一样,是PHP代码写的。


swoole扩展本身提供了web服务器功能,可以替代php-fpm。 而如果仅仅用swoole框架,可以像其它PHP框架一样,运行在nignx、apache等web服务器中。


swoole框架像PHP框架一样,适用于web开发。 而swoole扩展是提供了更底层的服务器通信机制,可以使用UDP、TCP等协议,而不仅仅是http。


安装方式上也不一样,swoole扩展像其它PHP扩展一样安装,可以用pecl,也可以编译安装(关于swoole的详细介绍请参考:http://ittxx.cn/view/201  )。而swoole框架用composer引入之后安装即可,或者下载源码后手动include/require。


另外,swoole框架依赖swoole扩展,是swoole扩展的应用实例。


框架-Swoole扩展-Swoole文档中心: http://wiki.swoole.com/wiki/page/p-framework.html 


swoole扩展是基础,基于swoole扩展,可以做出多种框架,而不仅仅是web框架。


Swoole框架


基于Swoole扩展开发的PHP web server&应用服务器, 内置框架。提供统一注册树,数据库操作,模板,Cache,日志,队列,上传管理,用户管理等丰富的功能特性。

swoole框架相比apache/fpm,主要是节省PHP框架和全局对象每次请求创建销毁带来的性能损耗。如果你的PHP代码是裸echo的方式,swoole框架并没有性能优势。

swoole框架给程序员提供了最大的空间,与http请求无关的全局对象只需要构造一次。程序中还可以对某些对象和数据进行缓存控制。


Swoole框架官网:https://wiki.swoole.com/wiki/index/prid-2 

GitHub地址:https://github.com/matyhtf/framework 

整个swoole项目地址:https://github.com/swoole 


安装Swoole框架和扩展


Swoole扩展

到GitHub首页下载Swoole扩展源码,地址:https://github.com/swoole/swoole-src   下载后按照标准的PHP扩展编译方式进行编译和安装。一般是

phpize

./configure

make install

编译安装完后,修改php.ini加入extension=swoole.so开启swoole扩展。也可以通过dl('swoole.so')动态载入,推荐修改php.ini。


下载swoole_framework源码,地址:https://github.com/swoole/framework  。放置到您的workspace目录中即可。swoole_framework是PHP代码,只需要require/include即可,无需编译和安装。


官方文档:https://wiki.swoole.com/wiki/page/71.html 


Nginx/Apache配置


1.应用服务器模式

9501就是swoole服务器监听的地址。root设置为静态文件的目录。当请求静态文件是由Nginx/Apache直接处理,当请求的文件不存在时,发送给Swoole服务器,来进行处理。


nginx配置

server {
    listen  80;
    server_name  www.swoole.com;
    root  /data/wwwroot/www.swoole.com;
    location / {
        if (!-e $request_filename){
            proxy_pass http://127.0.0.1:9501;
        }
    }
}

Apache

可以使用代理指令或Rewrite来实现。
<VirtualHost *:80>
    ServerName www.swoole.com
    DocumentRoot /data/webroot/www.swoole.com
    DirectoryIndex index.html index.php
    <Directory "/data/webroot/www.swoole.com">
        Options Indexes FollowSymLinks
            AllowOverride None
            Require all granted
    </Directory>
#   ProxyPass /admin !
#   ProxyPass /index.html !
#   ProxyPass /static !
#   ProxyPass / http://127.0.0.1:9501/
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
        RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ http://127.0.0.1:9501$1 [L,P]
    </IfModule>
</VirtualHost>


2.普通LAMP模式

基于php-fpm来运行swoole/framework的MVC程序,这是传统的LAMP模式。


Nginx配置

server {
    listen 80;
    root /home/htf/workspace/php/swoole.com;
    index           index.php index.html;
    server_name     local.swoole.com;
    location / {
        if (!-e $request_filename) {
            rewrite ^/(.*)$ /index.php;
        }
    }
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

Apache

<VirtualHost *:80>
    ServerName www.swoole.com
    DocumentRoot /data/webroot/www.swoole.com
    <Directory "/data/webroot/www.swoole.com">
        Options Indexes FollowSymLinks
        AllowOverride None
    </Directory>
    <IfModule mod_rewrite.c>
            RewriteEngine On
            RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
            RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
            RewriteRule ^(.*)$ /index.php [L]
    </IfModule>
</VirtualHost>



框架采用唯一接口对象机制。


调用框架的第一步,require('config.php');首先要包含config.php ,然后会生成$php对象。 如果在Controller、Model、View中,通过$this->swoole来调用。如果在函数,或者是其他被include的程序中,通过global $php来引用。



$php->db 数据库接口
$php->cache 缓存系统接口
$php->tplSmarty模板引擎接口
$php->model调用Model对象接口
$php->mvcMVC结构数据
$php->plugin插件系统接口


<?php 
/* 
导入config.php文件,这是调用框架必须的第一步 
config.php会载入基本配置选项,和基本函数,并生成全局接口变量$php 
在代码的任何位置处,都可以通过global $php来引用全局接口对象 
*/
require('config.php'); 
$res = $php->db->query('select * from test_table'); //执行SQL语句,得到一个查询的结果,查询结果,可以获取数据 
$res->fetch(); //获取单条数据。是字段-值,组成的关联数组。 
$res->fetchall(); //获取全部 
$data = array(); 
$data['title'] = 'hello wolrd!'; 
$data['author'] = 'me'; 
$php->db->insert($data,'test_table'); //将关联数组按照键值对应转为字段-值对应,插入到数据库表test_table中。 
//insert into test_table(title,author) values('hello wolrd!','me') 
/* 
$php->db->delete() 删除数据 
$php->db->update() 更新数据 
具体请参考Database类 
*/
/* 
模板操作,内置smarty模板引擎 
*/
$php->tpl->assign('title','hello world!'); 
$php->tpl->display('index.html'); 
?>


目录规范


假设根目录为$ROOT。


$ROOT/apps

应用程序代码,此目录中的代码是公用的,包括类,配置,模板,控制器,Model等。此目录不得放置静态文件,如js, css, jpg, html等,必须全部为.php文件。此目录不允许http直接访问。


$ROOT/apps/controllers Web应用的控制器类代码

$ROOT/apps/models 数据模型封装类代码

$ROOT/apps/configs 配置文件,通过$php->config['db']['master'] 这样来访问

$ROOT/apps/classes 类库,这里存放所有用户定义的类,必须符合psr-0规范,文件名必须为 {类名}.php,顶层命名空间必须为App。

$ROOT/apps/templates 模板文件目录


命名空间:如 new App\Hello\Test 类,会映射到 $ROOT/apps/classes/Hello/Test.php

配置文件:如 $php->config['db']['master'] 或 Swoole::getInstance()->config['db']['master'] 会映射到$ROOT/apps/configs/db.php文件,db.php中必须返回数组,key为master。

数据模型:model('UserInfo')或者$php->model->UserInfo 会映射到$ROOT/apps/models/UserInfo.php


$ROOT/static

静态文件目录,比如js, css, jpg, html等。此目录允许http直接访问。


$ROOT/index.php

web网站单一入口文件,可直接放到根目录,或者单独建立目录存放,如$ROOT/webroot/index.php


$ROOT/server.php

服务器程序启动入口。


控制器Controller


使用swoole的MVC管理,控制器类必须符合下列规范

· 代码放置到apps\controllers目录下

· 类名首字母必须为大写

· 必须继承自Swoole\Controller


转载请注明: ITTXX.CN--分享互联网 » PHP Swoole框架快速入门

最后更新:2018-12-14 09:30:53

赞 (2) or 分享 ()
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽