CSpeed框架,全堆栈的C框架,以高性能为目标

论坛 期权论坛     
选择匿名的用户   2021-5-30 11:37   469   0
<div class="article-content">
<h1>CSpeed micro framework written in C</h1>
<div></div>
<h2>开发环境</h2>
<pre class="hljs bash"><code class="copyable">Linux kernel 4.4.x、PHP7.1.8、Nginx1.12.1

Github:
    https://github.com/liqiongfan/cspeed

扩展只支持PHP7.x以上版本,低于PHP7.x的版本请先升级PHP

在WEB应用模式下,扩展通过解析 PATH_INFO 参数信息进行路由转发,请先确保 WEB服务器支持 PATH_INFO 模式,并且需要隐藏index.php
否则系统不生效,无法完成路由解析。

推荐的Nginx配置:

location / {
<span class="hljs-comment"># try_files $uri $uri/ /index.php$uri;</span>
    <span class="hljs-keyword">if</span> (!<span class="hljs-_">-e</span> <span class="hljs-variable">$request_filename</span>) {
        rewrite ^/(.*)$ /index.php/<span class="hljs-variable">$1</span> last;
    }
<span class="hljs-comment"># 如果是二级目录请设置为二级目录形式</span>
}

location ~ \.php {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_split_path_info ^(.&#43;\.php)(.*)$;     
    fastcgi_param  PATH_INFO <span class="hljs-variable">$fastcgi_path_info</span>;   
    fastcgi_param  SCRIPT_FILENAME  <span class="hljs-variable">$document_root</span><span class="hljs-variable">$fastcgi_script_name</span>;
    include        fastcgi_params;
}
<span class="copy-code-btn">复制代码</span></code></pre>
<div></div>
<h2>简单的 WEB 示例</h2>
<p>WEB 目录设置为如下:</p>
<pre class="blockcode"><code class="language-php"><code class="copyable">&#43;<span class="hljs-keyword">public</span>
|--index.php            入口文件
&#43;controllers
|--Index.php            Index默认控制器
&#43;admin                  新增admin模块
|--controllers          admin模块下的控制器目录
     |--Index           admin模块的Index控制器
&#43;fronted                fronted模块
|--controllers          fronted模块控制器目录
    |--Index            fronted模块Index控制器
<span class="copy-code-btn">复制代码</span></code></code></pre>
<p>public 目录下 index.php 内容如下:</p>
<pre class="hljs bash"><code class="copyable"><span class="hljs-variable">$app</span> &#61; new \Cs\App();

<span class="hljs-variable">$app</span>-&gt;run();
/* 超简单的框架已经完成 */
<span class="copy-code-btn">复制代码</span></code></pre>
<p>在 public 同级的目录controllers下创建一个 Index.php 文件,内容如下:</p>
<pre class="blockcode"><code class="language-php"><code class="copyable">Index.php:

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Index</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">indexAction</span><span class="hljs-params">()</span></span>{
        <span class="hljs-comment">// 当需要渲染视图的时候,请使用 $this-&gt;view 获得 View 引擎然后使用引擎具有的方法进行视图渲染 </span>
        <span class="hljs-keyword">echo</span> <span class="hljs-string">&#39;&lt;h1&gt;Hello CSpeed&lt;/h1&gt;&#39;</span>;
    }
}
<span class="copy-code-btn">复制代码</span></code></code></pre>
<p>配置好 Nginx 路由,打开浏览器,输入配置好的网站地址就会看到刚刚输入的内容:</p>
<pre class="hljs bash"><code class="copyable">http://path_to_cspeed
<span class="copy-code-btn">复制代码</span></code></pre>
<p>WEB应用路由规则:</p>
<pre class="hljs bash"><code class="copyable">假设配置的Nginx如上,配置网站 www.supjos.cn 指向:public目录下的index.php文件

那么,路由规则如下三种情况所示:

1)、www.supjos.cn
    不带PATH_INFO的路由指向与public目录同级的controllers下的Index.php控制器的indexAction方法
2)、www.supjos.cn/backend/goods/lists
    路由到backend模块的goods控制器下的listsAction方法
3)、www.supjos.cn/sys/info
    路由到与public同级的controllers目录下Sys.php下的infoAction方法
<span class="copy-code-btn">复制代码</span></code></pre>
<h2>注意</h2>
<pre class="blockcode"><code class="language-php"><code class="copyable">控制器文件首字母必须大写

如下路由所示:
www.supjos.cn/web/index/lists
  模 块: web            一个模块对应一个目录,此处对应web目录
  控制器: index          控制器文件命名为 Index.php
  方 法: listsAction    CSpeed系统方法名都以Action结尾
<span class="copy-code-btn">复制代码</span></code></code></pre>
<h2>简单的 API 应用</h2>
<p>public 目录下的 index.php 内容如下:</p>
<pre class="blockcode"><code class="language-php"><code class="copyable">index.php

<span class="hljs-comment">/* 当实例化一个 \Cs\App 类后,系统自动进行 autoload, autoload的机制参见下面介绍 */</span>
$app &#61; <span class="hljs-keyword">new</span> \Cs\App();

<span class="hljs-comment">/**
* 方法的第一个参数支持正则匹配,第二个参数是一个Closure闭包函数
*/</span>
$app-&gt;get(<span class="hljs-string">&#39;/index$&#39;</span>, <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span></span>{
    <span class="hljs-keyword">echo</span>
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP