V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fanjiapeng
V2EX  ›  PHP

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

  •  2
     
  •   fanjiapeng · 2018-05-12 01:41:28 +08:00 · 5062 次点击
    这是一个创建于 2138 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一、Asf 是什么?

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

    二、解决了什么问题?

    • 把复杂的逻辑简单化(降低错误率, 减少代码量)
    • 提升项目开发效率(您是否经历过,老板上午提需求,下午就得对外发布)
    • 规范不合理的开发方式
    • 解决输入输出的安全性问题
    • 解决框架带来的性能消耗

    三、有哪些优点呢?

    • 与原生 PHP 做比较,只有少量的性能消耗
    • 框架对常用类进行了实用的封装, 类随 PHP 进程启动就常驻内存
    • 支持本地类库自动加载规则
    • 支持多种配置文件格式(INI, PHP, PHP Array)
    • 支持多种路由协议, 默认使用 RESTful 路由模式, 提供方便的路由配置器
    • 提供实用的机制: GPC, Loader, Constants, Config, SG, 999, Utili
    • 提供日志记录功能, 包括 PHP 错误日志, SQL CURD 日志
    • 提供 DB 辅助函数(MySQL, Sqlite, Pgsql), 人性化 Query Builder
    • 支持 Log buffer cache, Log resources are automatically cleared
    • 遵循 PHP PSR Standards, PHP Coding Standards
    • 框架结构简单, PHP 标准的扩展安装方式, 框架上手快。框架执行速度快, 更少的内存、CPU 使用

    四、流程图

    五、性能

    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

    27 条回复    2018-05-18 10:51:45 +08:00
    fanjiapeng
        1
    fanjiapeng  
    OP
       2018-05-12 01:46:54 +08:00
    请大家多多支持,如有疑问,请留言。
    openplatform
        2
    openplatform  
       2018-05-12 07:38:41 +08:00
    @fanjiapeng github 地址?
    fanjiapeng
        3
    fanjiapeng  
    OP
       2018-05-12 08:26:37 +08:00
    MeteorCat
        4
    MeteorCat  
       2018-05-12 08:28:01 +08:00 via Android
    其实应该和 yaf 和 phalcon 对比,C 扩展和传统框架对比.......
    fanjiapeng
        5
    fanjiapeng  
    OP
       2018-05-12 08:37:03 +08:00
    @MeteorCat 大家都是各有优点的哟。单纯就从 QPS 来讲的话,Asf 毫不逊色的哟。
    zythum
        6
    zythum  
       2018-05-12 08:44:21 +08:00
    @fanjiapeng 横向对比 yaf 呢。能做一下么。如果只是 QPS 毫不逊色的话,没有采用的理由
    askfilm
        7
    askfilm  
       2018-05-12 09:16:33 +08:00   ❤️ 1
    虽然又是轮子, 自已当做学习还是很不错的! 上生产谁敢用你的东西呢,
    框架这个东西最初的意图不是追求快, 而是追求高效开发的。 同时框架也是讲究灵魂思想的, 比如 : tp(上手快,门槛底), laravel (有不少黑魔法),symfony(组件化,标准化思想), 你的好像并没有多少特点
    allenhu
        8
    allenhu  
       2018-05-12 09:47:23 +08:00 via Android
    二、解决了什么问题?
    好像前面几个都不是能依靠用某个框架解决的
    qloog
        9
    qloog  
       2018-05-12 09:49:13 +08:00
    强烈支持下,已 star
    Quarter
        10
    Quarter  
       2018-05-12 10:43:51 +08:00 via iPhone
    已 Star,有空研究,哈哈哈
    bestkayle
        11
    bestkayle  
       2018-05-12 10:47:04 +08:00
    支持支持。做贡献的人都很伟大
    gouchaoer
        12
    gouchaoer  
       2018-05-12 10:59:21 +08:00
    asf 和 yaf 有啥改进呢?
    另外运行在 fpm 模式下始终有一个问题困扰的 phper 就是阻塞 io 问题,如果业务中只是单纯连接数据库 /缓存之类的还好,如果是 rpc 调用一些 io 时间比较长的服务就会导致 qps 很差,不知道你对此有何看法
    sagaxu
        13
    sagaxu  
       2018-05-12 13:18:51 +08:00 via Android   ❤️ 1
    @gouchaoer asf 和 yaf 是过去,swoole+协程是未来
    tongz
        14
    tongz  
       2018-05-12 13:23:47 +08:00 via Android
    标题还以为 steam 那个 asf。。。支持支持~
    fanjiapeng
        15
    fanjiapeng  
    OP
       2018-05-12 16:11:41 +08:00
    @zythum Asf 宗旨就是上面提到的第二大点。Asf 也不是凭空憋一个大招出来的哟,它结合了公司级框架的优点,持续 1 年的迭代与创新。在第三大点里,列出了 Asf 优秀的,出色的功能,赶快去用用吧。Asf 相信你用上它,就会爱上它。
    fanjiapeng
        16
    fanjiapeng  
    OP
       2018-05-12 16:26:11 +08:00
    @askfilm
    以生产手机来举例,新品牌的手机 V1 刚上市的时候,购物者要么是冲着 BOSS 名声购买的,要么是进行市场比货觉得物有所值才购买的。下半年此厂商又生产了 V2, 虽然都是手机, 但功能, 配置, 或者说某些手机操作都变了哟。
    fanjiapeng
        17
    fanjiapeng  
    OP
       2018-05-12 19:49:38 +08:00
    @gouchaoer 关于 RPC 调用 IO 耗时长的问题,这个问题需要多面考量的。如及时性的合理考量?开发周期、资金成本、可维护性的考量? Server 端处理这个事件本来就很慢?同步异步合理选择?解决方案是否可以多面性?如果把范围缩小到一个点,只想解决在 PHP-FPM 下关于阻塞 IO 的问题,其它条件先放放。那么我推荐你看看韩老师的 Swoole
    fanjiapeng
        18
    fanjiapeng  
    OP
       2018-05-12 19:56:51 +08:00
    @sagaxu 不同的产品应该有不同的使用场景,伟大的工程师在解决方案上往往都会有多方面的考量。一个好产品的存在都必然是真实需求产生的。万金油还是很难找的哟。
    dobelee
        19
    dobelee  
       2018-05-12 20:00:50 +08:00 via Android
    mark。回去体验一下。
    usedname
        20
    usedname  
       2018-05-12 20:06:20 +08:00
    Asf_Application 还再用 PSR-0,看着就难受 。。。
    sagaxu
        21
    sagaxu  
       2018-05-12 22:23:55 +08:00
    @fanjiapeng 伟大的工程师就那么几个。普通工程师们,掌握个几种应对不同场景的模式,每个模式下熟悉 1-2 款最主流产品,就等于有了万金油了。
    cncqw
        22
    cncqw  
       2018-05-12 23:40:42 +08:00
    小框架坑太多不敢用
    eve1yb0dy
        23
    eve1yb0dy  
       2018-05-13 00:20:19 +08:00
    努力下就成了 tsf
    fanjiapeng
        24
    fanjiapeng  
    OP
       2018-05-13 00:30:38 +08:00
    @cncqw 虽然 Asf 在 GitHub 才放出来几天,但内部已经使用 1 年多了。框架的稳定性 Asf 是非常慎重的,Asf 有大量的各种测试 CASE 来保证, 也有详尽的文档来做开发导航。其中框架 API 测试 CASE 在源码 tests 目录里。开源之路任重而道远, Asf 欢迎你们来积极参与, 让我们一起来快乐成长, 我们相信小框架也会有大智慧。
    whyiyhw
        25
    whyiyhw  
       2018-05-13 01:40:41 +08:00 via Android
    现在要做一个公司要做一个静态资源服务器,来管理放在不同目录下的 API 和 web 还有后台的资源。
    核心功能就是读取路由,权限判定,映射目录,读取并返回文件,不同文件类型提供不同的文件处理方式。
    我目前的想法是做个定时任务,每天拉昨天的文件到一个指定的目录,然后提供一个 web 服务,单独来处理资源请求。
    web 服务我打算自己拼一个,现在就看好了路由,日志,orm 这几个组件。
    出于对个人因素的考虑(没什么太拿的出手的作品),我这个 web 服务,怎么写会好一些?
    fanjiapeng
        26
    fanjiapeng  
    OP
       2018-05-13 22:16:18 +08:00   ❤️ 1
    @whyiyhw 从你当前的场景来分析的话,我个人觉得好的方案是选用市场上已有的 CDN 服务。如果说自己想研究 CDN 服务搭建,网上的文章已经不少了哟。我这里提出需要注意点: 页面与资源的发布方式,优化方式,缓存控制策略,机房的合理部署, 机房的带宽选择, 人力的投入。
    hhxsv5
        27
    hhxsv5  
       2018-05-18 10:51:45 +08:00
    👍
    建议支持常驻内存、异步 IO、协程这些特性。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3454 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 974ms · UTC 11:17 · PVG 19:17 · LAX 04:17 · JFK 07:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.