基于状态机理论设计的 Web 服务器 xmlweb
- 授权协议: MIT
- 开发语言: JavaScript
- 操作系统: 跨平台
- 软件首页: https://github.com/qudou/xmlweb
- 软件文档: http://xmlplus.cn/xmlweb
- 官方下载: https://github.com/qudou/xmlweb/archive/master.zip
软件介绍
xmlweb 是一个基于状态机理论设计的 web 服务器,使用它可以设计出高可读性、高可维护性的 web 服务应用。你可以使用它作为 express 或者 koa 的一个替代。
形式地看,一个状态机包含了状态集、字母表、转移函数、起始状态和接受状态集。在 xmlweb 中将状态集处理为组件的节点集,字母表对应数据流,转移函数由具体的组件节点根据数据流中的数据决定下一节点走向,起始状态为 HTTP 节点的第一个子节点,接受状态集为那些能够响应请求的节点。下面举个简单的示例:
<i:HTTP xmlns:i="//xmlweb">
<i:Router url="/index.html"/>
<Hello id='hello'/>
</i:HTTP>
在这个示例可以看成包含两个状态节点的状态机,这两个节点分别是 Router 和 Hello。数据流由 HTTP 生成,里面包含一个关键的路径数据。当数据流经 Router 节点时,Router 根据数据流中路径是否为 /index.html 来绝对下一节点的走向,如果路径是 /index.html,那么数据流就往 Hello 节点流动,否则导致停机,也就是返回一个内置 404 页面。此示例中的 Hello 节点即是一个接受状态。
上面的示例非常简单,但是如果使用状态机的嵌套特性,你就可以构建非常强大的 web 服务应用,更多内容可以查看文档。
静态服务器
下面是一个简单的静态服务器,HTTP 节点是一个顶层状态机组件节点,默认侦听 8080 端口,可以通过设置静态参数 listen 来变更。Static 节点是一个内置的静态服务组件节点,已实现了缓存、压缩以及断点续传等作为一个 HTTP 静态服务器应该有的基本功能。
let xmlweb = require("xmlweb");
xmlweb("xp", function (xp, $_, t) {
$_().imports({
Index: {
xml:`<i:HTTP xmlns:i="//xmlweb">
<i:Static root="static"/>
</i:HTTP>`
}
});
}).startup("//xp/Index");
节点与数据流
状态机节点可以是任何侦听了 enter 事件的组件对象。上面的 HTTP 节点与 Static 节点都是内置的状态机节点。为了方便起见,你可以把节点看作中间件。下面是一个自定义的状态机节点:
Hello: {
fun: function (sys, items, opts) {
this.on("enter", (e, d) => {
d.res.setHeader("Content-Type", "text/html");
d.res.end("hello, world");
});
}
}
注意 enter 事件的侦听器有一参数 d,它代表状态机中数据流,数据流会在节点中流动、变化。
状态机
状态机 Flow 是 xmlweb 内置的状态机节点,它可以作为 HTTP 节点的子级或者 Flow 节点的子级使用,下面是一个子状态机节点的示例:
<i:Flow xmlns:i="//xmlweb">
<Hello id='hello'/>
</i:Flow>
路由
路由组件节点 Router 也是 xmlweb 内置的组件节点,它可根据请求类型与 URL 模式串引导状态机数据流的走向。它通常作为状态机节点的第一个子节点使用。
<i:HTTP xmlns:i='//xmlweb'>
<i:Router url='/index.html'/>
<Hello id='hello'/>
</i:HTTP>
URL 重写与重定向
Rewrite 组件节点可将一个进入的 URL 重新写成另一个 URL,下面是一个简单的示例:
<i:HTTP xmlns:i='//xmlweb'>
<i:Rewrite from='/' to='/index.html'/>
<Hello id='hello'/>
</i:HTTP>
Redirect 组件节点用于 URL 的重定向,该组件节点默认使用状态码为 302 的重定向:
<i:HTTP xmlns:i='//xmlweb'>
<i:Redirect to='http://xmlplus.cn'/>
</i:HTTP>
Session
xmlweb 提供一个内置的 Session 组件以提供会话的创建、存储以及移除。
<i:HTTP xmlns:i='//xmlweb'>
<i:Session id='session'/>
<Response id='response'/>
</i:HTTP>
xmlweb 内置了一个 session 的存储驱动组件 Storage,它位于命名空间 `//xmlweb/session` 中。组件 Storage 将数据以文本形式存放。你可以使用一个实现规定接口的同名组件来覆盖默认的内置组件。
Pro CSS and HTML Design Patterns
Michael Bowers / Apress / April 23, 2007 / $44.99
Design patterns have been used with great success in software programming. They improve productivity, creativity, and efficiency in web design and development, and they reduce code bloat and complexit......一起来看看 《Pro CSS and HTML Design Patterns》 这本书的介绍吧!
JS 压缩/解压工具
在线压缩/解压 JS 代码
Markdown 在线编辑器
Markdown 在线编辑器
