新一代轻量级 PHP 扩展框架 Asf

2018-05-12 01:41:28 +08:00
 fanjiapeng

一、Asf 是什么?

全称 API Services Framework, 用 C 语言编写的轻量级 PHP 扩展框架, 专注于 API 开发。

二、解决了什么问题?

三、有哪些优点呢?

四、流程图

五、性能

5.1 总结

5.1.1 压测结论

没有挑取漂亮的数据, 或者配置一个为了压测的最优环境. 只是简单地采用以大部分 web 机器使用的环境进行测评。
这里只是给出了一种测试方法, 通过多次不同并发数测试结果得知, Asf 与原生 PHP 性能消耗是 6% ~ 15%

5.1.2 业务开发速度结论

采用 Asf 框架开发业务, 代码量能节约 20% ~ 25%
假如项目开发需要 4 天 x 8 小时, 能节约出整整 1 天 x 8 小时的工作时间。

六、安装

6.1 环境要求

PHP 7.0 +
GCC 4.4.0+ (Recommended GCC 4.8+)

6.2 下载

git clone https://github.com/yulonghu/asf.git

6.3 在 Linux/Unix/Mac 下编译

$ /path/to/phpize
$ ./configure --with-php-config=/path/to/php-config
$ make && make install

6.4 文档

http://www.box3.cn/phpasf/index.html

七、开始使用

7.1 使用内置工具生成空项目

/php-bin-path/php /tools/asf_project.php /to-path/project_name

7.1.1 目录结构

+ public
  | - index.php
+ config
  | - config.php
+ library
+ modules
    | - Bootstrap.php
    | - Constants.php
  + api
    |+ services
	   |- Index.php  // Default service
    |+ logics
    |+ daos 

7.1.2 config/config.php

<?php
$configs = array(
    'asf' => array(
        'root_path' => realpath(dirname(__FILE__)),
    )
);

return $configs;

7.1.3 public/index.php

<?php
define('APP_PATH', dirname(__DIR__));

$app = new Asf_Application(APP_PATH . '/config/config.php');
$app->run();

7.1.4 Default service

<?php
class IndexService
{
    public function indexAction()
    {
        return 'Hello World';
    }
}

八、在 Nginx/Apache/Lighttpd 中运行

http://www.your-domain.com

8.1 输出结果

{
    "errno": 0,
    "data": "Hello World"
}

九、License

Asf is open source software under the PHP License v3.01

5116 次点击
所在节点    PHP
27 条回复
sagaxu
2018-05-12 22:23:55 +08:00
@fanjiapeng 伟大的工程师就那么几个。普通工程师们,掌握个几种应对不同场景的模式,每个模式下熟悉 1-2 款最主流产品,就等于有了万金油了。
cncqw
2018-05-12 23:40:42 +08:00
小框架坑太多不敢用
eve1yb0dy
2018-05-13 00:20:19 +08:00
努力下就成了 tsf
fanjiapeng
2018-05-13 00:30:38 +08:00
@cncqw 虽然 Asf 在 GitHub 才放出来几天,但内部已经使用 1 年多了。框架的稳定性 Asf 是非常慎重的,Asf 有大量的各种测试 CASE 来保证, 也有详尽的文档来做开发导航。其中框架 API 测试 CASE 在源码 tests 目录里。开源之路任重而道远, Asf 欢迎你们来积极参与, 让我们一起来快乐成长, 我们相信小框架也会有大智慧。
whyiyhw
2018-05-13 01:40:41 +08:00
现在要做一个公司要做一个静态资源服务器,来管理放在不同目录下的 API 和 web 还有后台的资源。
核心功能就是读取路由,权限判定,映射目录,读取并返回文件,不同文件类型提供不同的文件处理方式。
我目前的想法是做个定时任务,每天拉昨天的文件到一个指定的目录,然后提供一个 web 服务,单独来处理资源请求。
web 服务我打算自己拼一个,现在就看好了路由,日志,orm 这几个组件。
出于对个人因素的考虑(没什么太拿的出手的作品),我这个 web 服务,怎么写会好一些?
fanjiapeng
2018-05-13 22:16:18 +08:00
@whyiyhw 从你当前的场景来分析的话,我个人觉得好的方案是选用市场上已有的 CDN 服务。如果说自己想研究 CDN 服务搭建,网上的文章已经不少了哟。我这里提出需要注意点: 页面与资源的发布方式,优化方式,缓存控制策略,机房的合理部署, 机房的带宽选择, 人力的投入。
hhxsv5
2018-05-18 10:51:45 +08:00
👍
建议支持常驻内存、异步 IO、协程这些特性。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/454212

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX