正式介绍一下 fibjs 吧
发布于 3 年前 作者 xicilion 14342 次浏览 最后一次编辑是 1 年前 来自 分享

被转了两个帖子过来,引来吐槽无数。其实挺好,我吸收了很多建议,也有同学开始帮助修改一些代码,提交补丁。

那就正式介绍一下 fibjs 吧。

fibjs 是在 2012 年 2 月开始启动的项目,其目的是建立孢子社区的基础开发框架。不使用 nodejs 的原因相信通过之前的沟通,大家都了解了,可能大家不能同意这一点,但是我坚持认为异步不是一个适合大规模部署的开发模式。做做独立的小规模应用尚可。这一点不建议再讨论,我不打算说服任何人,也不打算让任何人说服。

最初的接近两个月时间主要在技术选型,为此考察了 v8,JavaScriptCore 和 SpiderMonkey。SpiderMonkey 本来是个不错的选择,因为其接口声称支持多线程,但是比较遗憾的是在稍后的一个版本注释里面,声明不再支持。JavaScriptCore 也被否决,同样因为无法实现预期目标。

最终选择了 v8 作为基础核心。原因是: 一、支持多线程重入,协程的堆栈本质是线程,所以要支持协程必须要支持多堆栈重入; 二、不支持多线程并发,虽然 isolate 支持多堆栈现场,但是 isolate 内部却为无锁环境,因此不能接受多线程同时运行,必须在一个线程退出后,另一线程才可进入;

以上两个条件是完美的协程运行环境,协程本身便是多现场单线程。每个协程自行建立堆栈,维护程序运行现场,而所有协程同一时间只会有一个激活,大家共用了同一个线程。

在简单封装 v8 后,下一步工作便是协程架构选型。在阅读完可以找到的所有协程实现后,选择了一个基础库(后来废弃,因为其项目本身也已久未维护,现协程核心全部自行实现)。在基础协程库之上,又实现了一整套协程调度,协程与工作线程的通讯基础,基于协程的基础锁对象等,形成完备的协程运行环境。

接下来,便是要将 v8 和协程结合在一起。为此改写了 v8 底部的 platform 层,建立了一个基于协程运行环境的 platform 层,因此 v8 完全感知不到协程的存在,而是认为自己运行在一个多线程的操作系统内部。这也是 fibjs 与 node 各种同步语法糖的最大差异。

其他模块的实现便没什么悬念了,像 http 这样的重头模块也都是写过十几遍的。其他的模块也都只是对已有模块的封装,毫无技术含量。

最初的 fibjs 为了标榜全能,还是支持回调的,程序员可以自由选择使用异步模式还是同步模式开发,而经过几个月的实践,发现根本没有人愿意使用异步,便索性彻底删除了异步接口。

这样经过半年左右的开发,fibjs 已经具备可以实验性上线的条件,团队便开始将孢子社区的代码向 fibjs 迁移(之前的代码是基于我以前写的另一个服务器框架),最终 9 月开始实验性上线。

2013 年初,我开始向外部发布 fibjs 的项目信息,很多朋友开始询问是否开源,何时开源。但是因为 fibjs 运行时间较短,再加上孢子社区开发比较紧张,开源计划一拖再拖。到今年 5 月,终于因为机缘巧合,痛下决心,彻底开源了。

在接下来的几年里,fibjs 会跟随孢子社区的发展持续开发,孢子社区开源 fibjs 有几个目的: 一、回馈开源社区。fibjs 是建立在开源项目基础上的,开发过程中或多或少也算趟了不少的坑,分享出来,或许可以让更多人受益; 二、开源更大的好处是使用场景的多样性可以帮助发现并修复以前隐藏的错误或者不合理的设计,这种回馈会反过来帮助孢子社区的项目; 三、招募新员工,我们持续招募各种大牛,中牛,小牛,小小牛,并通过 fibjs 让你们花更少的时间赚更多的钱;

招聘启事见孢子社区网页源码

fibjs@github https://github.com/xicilion/fibjs fibjs@baoz http://baoz.me/fibjs

最后再强调一下,我不打算说服任何人使用 fibjs,也不打算向任何人证明 fibjs 比 nodejs 谁好谁坏。做 fibjs 的原因是自己要用。如果碰巧有人觉得这货还可用,能解决一些问题,那就欢迎一起来把她搞得更好一些。如是。

48 回复

第一帖,顶起!

关注一下@@

顶 祝fibjs千秋万代,一统江湖

帮顶,刚刚 star,希望文档多一些。

ruby开始也是,那个日本人造了个宝石自己用,后来发现很多人喜欢就发展起来了。

顶一个!

好厉害的样子!

收藏了, 持续关注中

最近nodejs的开发貌似比较疲软的样子,让fibjs去踢踢nodejs的屁股,有竞争蛮好的

支持响马。

只有js的库 node 和 fibjs 应该都可以用吧?

还有 你们论坛的滚动为什么感觉比别的要平滑…

果断支持响马!

@idy 我们自己重写了scroll组件

非常认同@yeaha 呵呵,同感

@ngot 靠 是照着mac设置的不滚动隐藏做的 ;) 我说怎么没看出来。刚才把那个选项关了 别的页面都变了 你们的没变 -.-

置顶了大家讨论讨论吧 :)

@alsotang  被挂起来了哈哈。多谢支持。

摸索node.js有一阵子了~国内的文档也丰富起来,卯起来买几本k,希望fibjs能早点出书…

应该提供英文文档啊,这样其他国家的开发人员也能参与进来的。

@fordsupr 出一本《深入浅出 fibjs》。。

支持! 响马就是多年前 NetBox 的作者,敬佩啊敬佩~!

@alsotang 有这个想法。不知道有没有人愿意看。

@ngot 看当然愿意看啦…就是不愿意花钱看而已…(说笑)

@myy 哈哈这里还有知道 netbox 的,意外哈哈。

@alsotang 久深易浅是朴灵努力数年的宏作,集深浅之大成,我没事都会拿出来翻翻,每次都有所得。估计国内技术出版数年内都难超越。

@xicilion 求响马帮助,我想写一点点介绍文字

@ngot 可以从入门文档开始。

@xicilion 是的,我到现在还有安装包(nbsetup_2.8.4128.exe)和chm帮助文件。

@myy netbox 也在 github 开源了,不过已经多年不维护,就在 fibjs 隔壁。

@xicilion 知道了,谢谢~

孢子社区被黑的节奏了么,一直在重定向跳来跳去

@fantasyni 需要打开第三方cookie,否则会出现这个现象。

文档齐全,API易用。口碑自动散开了,众多noder会投靠。现在文档也太简陋了

还有Node一直被吐槽的错误处理,在fibjs是怎么解决的? @ngot @xicilion

很有替力啊,建议文档,项目英文中文并存,像pomelo那样。或许可以增加很多影响力

@coolicer 错误处理可以用你学过的一切知识,比如 try/catch/finally。文档主要是入门文档缺,模块文档是齐全的,还是因为这个项目本身只是自动,没有一下来这么多新用户过。

@xicilion 后面看了一下确实是齐的,只是查看略有不便(视觉上)。

前不久听庄henfei说过fibjs这个项目,感觉大叔一直很努力啊!

@tsq 别暴露我啊

@ngot 哈哈,我故意写成庄henfei的,不过现在你把自己暴露了!

@ravenwang 怎么感觉好像是天龙八部里面的那个星宿老怪~!$%^&*(

顶!!!!!!!!!!!!!!!!!

回到顶部