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

自荐一个 phalcon + swoole 框架

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

    Github: https://github.com/phwoolcon

    简介: https://github.com/phwoolcon/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   ·   实用小工具   ·   963 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:33 · PVG 05:33 · LAX 13:33 · JFK 16:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.