自荐一个 phalcon + swoole 框架 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Fishdrowned
V2EX    PHP

自荐一个 phalcon + swoole 框架

  •  
  •   Fishdrowned 2017-03-22 21:26:25 +08:00 10230 次点击
    这是一个创建于 3124 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Github: https://github.com/phwoolcon

    简介: https://github.com/phwoolon/bootstrap/blob/master/README-zh.md

    一开始目的是打算做一个高性能的两栖框架(兼容 php-fpm 和守护进程模式),后来顺带解决了模块化和简化 composer 部署的问题。

    目前公司内部新项目都在使用这个框架进行开发。

    由于文档严重欠缺,思路也还没有完全定型,来这里骗 star 实在有点不好意思。

    22 条回复    2018-01-31 15:54:08 +08:00
    abc123ccc
        1
    abc123ccc  
       2017-03-23 09:09:15 +08:00
    用的是 phalcon 的那个版本????
    sagaxu
        2
    sagaxu  
       2017-03-23 09:28:53 +08:00 via Android
    swoole 可以升级到 2.0 了,自带 coroutine
    assad
        3
    assad  
       2017-03-23 09:40:11 +08:00
    复杂要死,最好是开箱即用把。还得弄半天,结果感觉也不是很好
    sagaxu
        4
    sagaxu  
       2017-03-23 10:15:36 +08:00
    @assad 如果太过复杂,就不如切换到 Go 或者 Java ,性能天生好,解决方案也更成熟,轮子也远远的多
    assad
        5
    assad  
       2017-03-23 10:38:15 +08:00
    @sagaxu 作者出发点很好,只是希望能降低使用成本,小白 PHP 很多,目前这样的,上手还是有点难度
    assad
        6
    assad  
       2017-03-23 10:39:28 +08:00
    @sagaxu PHP 的解决方案也不赖。 Go 呢,现在是啥都有,感觉开发 Web 还是 PHP ,对于个人开发者,小型企业首选。
    Fishdrowned
        7
    Fishdrowned  
    OP
       2017-03-23 11:05:20 +08:00
    @abc123ccc 从 phalcon 2.0 开始开发,一路跟随 phalcon 版本升级,单元测试用的是最版本( 3.0.4 ), 2.0 现在没做测试,应该也支持吧……
    Fishdrowned
        8
    Fishdrowned  
    OP
       2017-03-23 11:06:39 +08:00
    @sagaxu 嗯, swoole 现在用的也是最新版本, 1.9 的兼容性问题已经解决了。

    https://github.com/phwoolcon/phwoolcon/issues/2
    Fishdrowned
        9
    Fishdrowned  
    OP
       2017-03-23 11:08:16 +08:00
    @sagaxu 不过对协程,我是只知其一不知其二,还不敢用。
    vus520
        10
    vus520  
       2017-03-23 11:15:39 +08:00
    只想要一个独立的协程实现,可以简单在现有业务中使用,不需要换框架装扩展
    Fishdrowned
        11
    Fishdrowned  
    OP
       2017-03-23 11:18:26 +08:00
    @assad

    因为要执行“模块化”的理念,还要方便跟进版本,不更改框架目录结构,也不碰 composer.json ,所以我引用了 `wikimedia/composer-merge-plugin`,割裂了工作目录和真正的项目代码仓库(因为我把项目作为一个 composer 组建引进来),使得整个架构变得复杂。

    后面我会增加一些工具,尽量做到开箱即用,至少初始化、创建本地 composer 仓库,不用那么多手动操作。
    Fishdrowned
        12
    Fishdrowned  
    OP
       2017-03-23 11:25:46 +08:00
    @vus520 我对协程还不得要领,欢迎分享!
    maxincai
        13
    maxincai  
       2017-03-23 11:51:36 +08:00
    这个模块化的方式很特别,非常受启发,感谢。
    Fishdrowned
        14
    Fishdrowned  
    OP
       2017-03-23 11:56:49 +08:00
    @maxincai 是的,这点是我误打误撞中想到的办法(看到有赞,正在洋洋得意中)
    Fishdrowned
        15
    Fishdrowned  
    OP
       2017-03-23 12:01:00 +08:00
    说个题外话,关于单元测试的。

    我是从这个框架开始认真做单元测试的,感觉测试的好处其实不在于测试本身,而是你要迫使自己写出可测试的代码时,这个过程会让你重新组织你的思路,对自己要做的事情,对业务逻辑会有更清晰的认识。
    sagaxu
        16
    sagaxu  
       2017-03-23 12:54:29 +08:00
    @assad 现在已经没有比较纯粹的 web 项目了,页面的生成往往由客户端完成,服务端只负责 API 和吞吐数据。从开发效率,和生态上看, PHP 已经不是首选了, python 更胜一筹, rails 的开发效率更高。 Java 框架也在进化,有了 spring boot 之后,简化了很多,加上静态语言的 IDE 能力,开发效率也得到了极大的提高。当下, Go 语言也是非常不错的选择了。
    DrenA
        17
    DrenA  
       2017-03-23 18:44:58 +08:00
    phalcon 是个巨坑,可能比 lumen 还大,要慎重
    Fishdrowned
        18
    Fishdrowned  
    OP
       2017-03-23 20:16:04 +08:00
    @DrenA 方便分享一下你的故事吗?我也踩了一些坑,有些是用自己实现方法去避开,有些避不开就提交 pull request 给 phalcon ,感觉还可以吧。对 phalcon 有些不喜欢的地方,例如 phql , redis/memcache cache 部分,还有 di 里面的 Closure::bind()。

    swoole 也踩过,也提了 pull request ,不过 swoole 我现在只用到很少一部分。


    @sagaxu 现在做 web 的实在是五花八门,尤其是 js ,感觉要一统天下。
    zjsxwc
        19
    zjsxwc  
       2017-03-23 21:26:02 +08:00 via Android   1
    phalcon 除了性能和相对使用简单,其它就是半吊子的 DI ,半吊子的模板引擎,半吊子的 ORM ,坑略多。


    DI 没有实现自己的配置表达式,本来配置新类替换老类,只需要一行 yml , phalcon 需要手写 PHP ,容易出错。

    volt 模版引擎不知道现在有没有实现安全沙盒、局部 render 等功能,体验就是个阉割版的 twig ,不如直接用 twig 。


    ORM 不知道现在能否通过类 annotation 自动生成到数据库中,自动把数据库表状态映射到类代码中,数据迁移 migration 当时我用的时候也没提供。

    到后期项目膨大后,维护起来还是有点苦恼的,什么都是半吊子, feature 说起来都有,但用起来没有老牌的专业,反正我当时做完项目后就不想用了。



    支持 swoole ,比我以前手撸 libevent 好多了 大大提高生产力。
    Fishdrowned
        20
    Fishdrowned  
    OP
       2017-03-24 13:00:14 +08:00
    @zjsxwc 非常感谢分享!我不擅长归纳总结,看到你说的是眼前一亮!

    你遇到的问题我基本上也遇到了,我也说一下感受。

    DI 我倒是喜欢用 php 来配置,用 ::class 关键字写类名,可获得 IDE 自动完成加持,反而不容易错。例如替换 User 类:

    use Phwoolcon\Model\User as PhwoolconUser;
    use My\Project\Model\User as MyUser;

    // Inject front user model
    $di->set(PhwoolconUser::class, MyUser::class);

    模板我直接用 php 。

    ORM 的数据表字段和对象属性映射,我是反过来,从数据表里面读出来然后生成的,放在一个 ModelTrait 里面( https://github.com/phwoolcon/phwoolcon/blob/master/bin/update-phwoolcon-package-resource#L189 )。

    phalcon 的 console 不敢恭维,我是用了 symfony 的。

    migrate 是仿照 laravel 的那一套自己开发的。

    config 也是仿照 laravel 那一套,做了 environment config ,然后增加了 override config 和 db config 。
    hhxsv5
        21
    hhxsv5  
       2018-01-31 15:52:00 +08:00
    赞!
    本人也在造这类的轮子,通过 Swoole 来加速 Laravel/Lumen。有兴趣可以尝试与探讨。
    hhxsv5
        22
    hhxsv5  
       2018-01-31 15:54:08 +08:00
    Laravel 具有高开发效率,分分钟撸出一套接口,但性能非常差,生产环境 FPM 下再怎么优化,一个 hello world 也要 120ms。Swoole 异步非阻塞高性能引擎 。通过 Swoole 来加速 Laravel/Lumen,LaravelS github.com/hhxsv5/laravel-s 兼顾开发效率和性能。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1255 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 17:17 PVG 01:17 LAX 10:17 JFK 13:17
    Do have faith in what you're doing.
    ubao 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