<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Fibjs</id>
	<title>Fibjs - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Fibjs"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Fibjs&amp;action=history"/>
	<updated>2026-07-14T08:11:10Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Fibjs&amp;diff=2936863&amp;oldid=prev</id>
		<title>imported&gt;Yumeto：​使用DisamAssist清理消歧義連結：Go（改連結至Go語言）。</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Fibjs&amp;diff=2936863&amp;oldid=prev"/>
		<updated>2026-03-02T15:25:34Z</updated>

		<summary type="html">&lt;p&gt;使用&lt;a href=&quot;/index.php?title=User:Peacearth/DisamAssist.js&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:Peacearth/DisamAssist.js（页面不存在）&quot;&gt;DisamAssist&lt;/a&gt;清理&lt;a href=&quot;/index.php?title=WP:DAB&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:DAB（页面不存在）&quot;&gt;消歧義&lt;/a&gt;連結：&lt;a href=&quot;/wiki/Go&quot; title=&quot;Go&quot;&gt;Go&lt;/a&gt;（改連結至&lt;a href=&quot;/wiki/Go%E8%AA%9E%E8%A8%80&quot; title=&quot;Go語言&quot;&gt;Go語言&lt;/a&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{NoteTA&lt;br /&gt;
|G1 = IT&lt;br /&gt;
|G2 = FL&lt;br /&gt;
}}&lt;br /&gt;
{{Infobox software&lt;br /&gt;
| name                   = Fibjs&lt;br /&gt;
| logo                   = Fibjs logo.svg&lt;br /&gt;
| author                 = 刘琥（Leo Hoo）&lt;br /&gt;
| developer              = [https://github.com/fibjs/fibjs/graphs/contributors Fibjs 开发者]、其他贡献者&lt;br /&gt;
| repo                   = {{URL|https://github.com/fibjs/fibjs|Fibjs Repository}}&lt;br /&gt;
| programming language   = [[C++]]、[[JavaScript]]&lt;br /&gt;
| operating system       = [[Mac OS X]]、[[Linux]]、[[Solaris]]、[[Arch Linux]]、&amp;lt;br&amp;gt;[[FreeBSD]]、[[OpenBSD]]、[[Windows]]、[[webOS]]&lt;br /&gt;
| genre                  = [[运行时系统]]&lt;br /&gt;
| license                = [[GPLv3]]&lt;br /&gt;
| website                = {{URL|https://fibjs.org}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Fibjs&amp;#039;&amp;#039;&amp;#039;是一个能在服务器端运行[[JavaScript]]的[[开放源代码]]、[[跨平台]]JavaScript[[执行环境]]。Fibjs 使用 [[协程]] , 同步风格 &amp;amp; 非阻塞IO模型来构建可伸缩的高可用的系统. Fibjs含有一系列內置模块，使得程序可以脱离[[Apache HTTP Server]]或[[網際網路資訊服務|IIS]]，作为独立的服务器运行。Fibjs的出现降低了开发者的开发难度，并大大提升了javascript在服务端性能表现。&lt;br /&gt;
&lt;br /&gt;
==概览==&lt;br /&gt;
Fibjs允许通过[[JavaScript]]和一系列模块来编写[[服务器]]端应用和网络相关的应用。核心模块包括[[文件系统]]I/O、网络（[[HTTP]]、[[传输控制协议|TCP]]、[[用户数据报协议|UDP]]、[[DNS]]、[[傳輸層安全協議|TLS/SSL]]等）、[[二进制]]数据流、[[加密]]算法、[[图像处理]]等等。&amp;lt;ref&amp;gt;[http://fibjs.org/docs/manual/module/readme.md.html Modules] {{Wayback|url=http://fibjs.org/docs/manual/module/readme.md.html |date=20170907123329 }}, fibjs Website&amp;lt;/ref&amp;gt;Fibjs模块的API形式简单，降低了编程的复杂度。&lt;br /&gt;
&lt;br /&gt;
Fibjs内置了[[ØMQ]]提供了链式的消息处理器,因此可以用二十行代码&amp;lt;ref&amp;gt;{{Cite web |url=http://fibjs.org/docs/guide/hello.md.html |title=Fibjs Httpserver Examples |accessdate=2017-09-07 |archive-date=2017-09-07 |archive-url=https://web.archive.org/web/20170907122902/http://fibjs.org/docs/guide/hello.md.html |dead-url=no }}&amp;lt;/ref&amp;gt;开发出拥有动态数据响应和静态文件服务功能的服务端框架。Fibjs的程序可以在[[Microsoft Windows]]、[[Linux]]、[[Unix]]、[[Mac OS X]]、[[Arch Linux]]等服务器上运行。Fibjs也可以使用[[CoffeeScript]]（一种旨在简化JavaScript的替代语言，其代码可按照一定规则转化为合法的JavaScript代码）、[[TypeScript]]（微软开发的强化了数据类型的JavaScript变体）、[[Dart]]语言，以及其他能够编译成JavaScript的语言编程。&lt;br /&gt;
&lt;br /&gt;
Fibjs主要用于编写像Web服务器一样的网络应用，这和[[Node.js]]是类似的。但是Fibjs与Node.js最大的不同在于，Node.js是非阻塞的（多条命令可以同时被运行，通过[[回调函数]]得知命令已结束运行），而Fibjs是阻塞的，它的风格更接近[[C语言]]，它的机制和[[Go語言|Go]]更像，Fibjs采用了非阻塞IO模型，但是提供给用户使用的API是阻塞的，它的特色是使用coroutine中文名字叫[[协程]]这和Go所采用的Goroutine十分相像，使得阻塞API不会阻塞javascript线程，从而达到更大的并发。因此Fibjs也非常地适合网络服务。&lt;br /&gt;
&lt;br /&gt;
Coroutine是类似线程的概念（但Coroutine并不是线程）。线程属于系统层面，通常来说创建一个新的线程会消耗较多的资源且管理不易。而 Coroutine就像轻量级的线程，但我们称其为并发，一个Fibjs程序可以运行超过数万个 Coroutine，并且这些性能都是原生级的，随时都能够关闭、结束。一个核心里面可以有多个Coroutine。&lt;br /&gt;
在内置的官方包中也不时能够看见Coroutine的应用，像是net/http中用来监听网络服务的函数实际上是创建一个不断运行循环的Coroutine。&lt;br /&gt;
&lt;br /&gt;
Fibjs使用[[Google]] [[V8 (JavaScript引擎)|V8 JavaScript 引擎]]，因为：&lt;br /&gt;
* V8的线程支持Coroutine重入&lt;br /&gt;
* V8是基于[[BSD许可证]]的开源软件&lt;br /&gt;
* V8速度非常快&lt;br /&gt;
* V8专注于网络功能，在HTTP、DNS、TCP等方面更加成熟&lt;br /&gt;
&lt;br /&gt;
Fibjs内置近150个内置模块和对象, 已经有数十万个javascript模块，它们可以通过一个名为[[npm]]的管理器免费下载。&lt;br /&gt;
&lt;br /&gt;
==历史==&lt;br /&gt;
Fibjs于2012年写成，其作者是刘琥（Leo Hoo），网名叫作响马，圈内人都尊称他大叔或马叔。刘琥同时是开源服务器应用框架Netbox&amp;lt;ref&amp;gt;{{Cite web |url=http://www.netbox.cn/ |title=NetBox official website |accessdate=2017-09-07 |archive-date=2017-09-04 |archive-url=https://web.archive.org/web/20170904033335/http://netbox.cn/ |dead-url=no }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Cite web |url=https://github.com/mirror4/netbox |title=Netbox source code |accessdate=2017-09-07 |archive-date=2018-06-11 |archive-url=https://web.archive.org/web/20180611003058/https://github.com/mirror4/netbox |dead-url=no }}&amp;lt;/ref&amp;gt;的作者、中国著名社区网站[[西祠胡同]]创始人。&lt;br /&gt;
&lt;br /&gt;
Fibjs的出现源自于一个名为“孢子社区”的一个项目，在做技术选型的时候考虑到前后端代码复用，方便招聘开发人员等原因，决定将后端转向JS平台。当时，刘琥认为Node.js的异步开发模式不是一个适合大规模部署的方式，会给开发和维护带来很大问题。刘琥更倾向于使用Go的方式来实现异步，从而能达到更高的并发，于是Fibjs就出现了。&amp;lt;ref&amp;gt;{{Cite web |url=https://github.com/ngot/blog/issues/1 |title=认识Fibjs |accessdate=2017-09-07 |archive-date=2019-02-16 |archive-url=https://web.archive.org/web/20190216023824/https://github.com/ngot/blog/issues/1 |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 2012年2月，Fibjs项目启动&lt;br /&gt;
* 2012年9月，Fibjs开始在孢子社区&amp;lt;ref&amp;gt;{{Cite web |url=http://named.cn/fibjs.bbs |title=Fibjs community |access-date=2017-09-07 |archive-url=https://web.archive.org/web/20170907123423/http://named.cn/fibjs.bbs |archive-date=2017-09-07 |dead-url=yes }}&amp;lt;/ref&amp;gt;生产环境试运行&lt;br /&gt;
* 2013年初，向外公开fibjs信息&lt;br /&gt;
* 2014年5月，项目推送Github&amp;lt;ref&amp;gt;{{Cite web |url=https://github.com/fibjs/fibjs |title=project github |accessdate=2017-09-04 |archive-date=2018-06-11 |archive-url=https://web.archive.org/web/20180611032629/https://github.com/fibjs/fibjs |dead-url=no }}&amp;lt;/ref&amp;gt;，彻底开源&lt;br /&gt;
* 2014年10月，南京源创会，首次开讲，引起业界轰动&amp;lt;ref&amp;gt;{{Cite web |url=http://named.cn/498326 |title=fibjs机制ppt |access-date=2017-09-07 |archive-url=https://web.archive.org/web/20170907122048/http://named.cn/498326 |archive-date=2017-09-07 |dead-url=yes }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* 2016年7月，Fibjs第4次Fiber改造，实现M:N多线程和多Fiber映射模型。&amp;lt;ref&amp;gt;{{Cite web |url=http://nodejs.club/slides/season-4/Fiber%E5%BC%95%E6%93%8E.pdf |title=Fibjs线程和Fiber模型 |accessdate=2017-09-07 |archive-date=2017-09-07 |archive-url=https://web.archive.org/web/20170907123000/http://nodejs.club/slides/season-4/Fiber%E5%BC%95%E6%93%8E.pdf |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* 2017年3月，node.js南京地下铁沙龙，Fibjs作者刘琥作为特邀嘉宾介绍Fibjs，并和nodejs开发者进行了一场激烈的辩论&amp;lt;ref&amp;gt;[http://weibo.com/1642632462/EBa3iieo2?type=repost Fibjs vs Node.js]&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 程序示例 ==&lt;br /&gt;
用Fibjs撰写的[[网络服务器|HTTP Server]]版[[Hello World|hello world]]示例：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const http = require(&amp;#039;http&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
let svr = new http.Server(&amp;quot;&amp;quot;, 8000, (request) =&amp;gt; {&lt;br /&gt;
  request.response.setHeader(&amp;#039;Content-Type&amp;#039;,&amp;#039;text/plain&amp;#039;);&lt;br /&gt;
  request.response.write(&amp;#039;Hello World!&amp;#039;);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
console.log(&amp;#039;Server running at http://127.0.0.1:8000/&amp;#039;);&lt;br /&gt;
svr.start();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
另一个简单的[[Transmission Control Protocol|TCP]]服务器示例，监听（Listening）[[TCP/UDP端口列表|端口7000]]并输出 (echo)之前输入的信息：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const net = require(&amp;#039;net&amp;#039;);&lt;br /&gt;
const coroutine = require(&amp;#039;coroutine&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
let s = new net.Socket();&lt;br /&gt;
s.bind(8000);&lt;br /&gt;
s.listen();&lt;br /&gt;
coroutine.start(() =&amp;gt; {&lt;br /&gt;
    while(1) {&lt;br /&gt;
        coroutine.start((c)=&amp;gt;{&lt;br /&gt;
            console.log(c.remoteAddress, c.remotePort, &amp;quot;-&amp;gt;&amp;quot;,c.localAddress, c.localPort);&lt;br /&gt;
            try {&lt;br /&gt;
                var b;&lt;br /&gt;
                while (b = c.recv())&lt;br /&gt;
                    c.send(b);&lt;br /&gt;
            } finally {&lt;br /&gt;
                c.close();&lt;br /&gt;
                c.dispose();&lt;br /&gt;
            }&lt;br /&gt;
        }, s.accept());&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
console.log(&amp;quot;Tcp Server listen on port 8000&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上例中第二个程序，演示了如何使用Coroutine，coroutine使得while(1)不会阻塞后面的代码从而实现了并发。&lt;br /&gt;
&lt;br /&gt;
==技术==&lt;br /&gt;
===Coroutine===&lt;br /&gt;
Fibjs以单线程运行，使用非阻塞I/O调用，这样既可以支持数以万计的并发连接，又不会因多线程本身的特点而带来麻烦。众多请求只使用单线程的设计意味着可以用于建立高并发应用程序。Fibjs应用程序的设计目标是任何需要操作I/O的函数都使用Coroutine[[协程]]来完成。当使用Fibjs进行服务器应用开发时，每次和客户端建立连接都会创建一个Fiber(task)放在队列中等待，javascript线程依次取fiber执行，每当执行到I/O操作，Coroutine都会把上下文切换到后台线程(worker thread)来完成相应的操作，并且把Javascript的上下文被切换到下一个fiber中继续执行。当后台线程的fiber执行完毕之后会重新把fiber丢进队列尾部等待，等待Javascript执行到该fiber。从而完成这个异步操作。&lt;br /&gt;
&lt;br /&gt;
===V8===&lt;br /&gt;
{{Main|V8 (JavaScript引擎)}}&lt;br /&gt;
[[V8 (JavaScript引擎)|V8]]是为[[Google Chrome]]设计的JavaScript运行引擎，Google于2008年将其开源。V8用C++写成，它将JavaScript源代码编译成本地[[机器码]]而不是随时解释。&lt;br /&gt;
&lt;br /&gt;
Fibjs的核心功能被包含进一个JavaScript库，并通过C++将各部分与操作系统进行联系。&lt;br /&gt;
&lt;br /&gt;
=== npm ===&lt;br /&gt;
&lt;br /&gt;
[[npm]]是Node.js附带的包管理器。Fibjs高度兼容了npm。npm是一个命令行工具，用于从NPM Registry中下载、安装Fibjs程序，同时解决依赖问题。npm提高了开发的速度，因为它能够负责第三方Fibjs程序的安装与管理。&lt;br /&gt;
&lt;br /&gt;
===统一API===&lt;br /&gt;
Fibjs将浏览器、数据（例如[[MongoDB]]或[[Redis]]）等组合到一起，通过[[JSON]]提供一个统一的接口。由于[[前端]]框架和一些基本的后端开发技术（如[[MVC]]、[[Model View Presenter|MVP]]、[[Model View ViewModel|MVVM]]等）变得流行，Fibjs也支持客户端和服务器端重新利用相同的模型和接口。&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
{{refs}}&lt;br /&gt;
&lt;br /&gt;
[[Category:带有代码示例的条目]]&lt;br /&gt;
[[Category:JavaScript函数库]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Yumeto</name></author>
	</entry>
</feed>