自荐一个 phalcon + swoole 框架

2017-03-22 21:26:25 +08:00
 Fishdrowned

Github: https://github.com/phwoolcon

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

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

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

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

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

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

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

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

我是从这个框架开始认真做单元测试的,感觉测试的好处其实不在于测试本身,而是你要迫使自己写出可测试的代码时,这个过程会让你重新组织你的思路,对自己要做的事情,对业务逻辑会有更清晰的认识。
sagaxu
2017-03-23 12:54:29 +08:00
@assad 现在已经没有比较纯粹的 web 项目了,页面的生成往往由客户端完成,服务端只负责 API 和吞吐数据。从开发效率,和生态上看, PHP 已经不是首选了, python 更胜一筹, rails 的开发效率更高。 Java 框架也在进化,有了 spring boot 之后,简化了很多,加上静态语言的 IDE 能力,开发效率也得到了极大的提高。当下, Go 语言也是非常不错的选择了。
DrenA
2017-03-23 18:44:58 +08:00
phalcon 是个巨坑,可能比 lumen 还大,要慎重
Fishdrowned
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
2017-03-23 21:26:02 +08:00
phalcon 除了性能和相对使用简单,其它就是半吊子的 DI ,半吊子的模板引擎,半吊子的 ORM ,坑略多。


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

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


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

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



支持 swoole ,比我以前手撸 libevent 好多了 大大提高生产力。
Fishdrowned
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 。

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

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

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

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

© 2021 V2EX