基于状态机理论设计的 Web 服务器 xmlweb

码农软件 · 软件分类 · 服务器端JavaScript · 2019-04-13 12:12:54

软件介绍

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 将数据以文本形式存放。你可以使用一个实现规定接口的同名组件来覆盖默认的内置组件。

本文地址:https://codercto.com/soft/d/3485.html

安全之美

安全之美

Andy Oram、John Viega / 徐 波、沈晓斌 / 机械工业出版社华章公司 / 2011-4-28 / 65.00元

“这本深思熟虑的论文集(《安全之美》)帮助读者摆脱安全领域闪烁着欺骗光芒的心理恐惧,转而欣赏安全的微妙美感。本书描述了安全的阴和阳,以及引人注目的破坏性和闪亮光辉的建设者之间剑拔弩张的气氛。” ——Gary McGraw,Cigital公司CTO,《Software Security》及其他9本书的作者 大多数人不会太关注安全问题,直到他们的个人或商业系统受到攻击。这种发人深省的现象证......一起来看看 《安全之美》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具