新一代轻量级 PHP 扩展框架 Asf - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fanjiapeng
V2EX    PHP

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

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

    一、Asf 是什么?

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

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

    三、有哪些优点呢?

    • 与原生 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,有空研究,哈哈哈
    KgM4gLtF0shViDH3
        11
    KgM4gLtF0shViDH3  
       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     Solana     939 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 18:38 PVG 02:38 LAX 11:38 JFK 14:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86