xmlweb

基于状态机理论设计的 Web 服务器
授权协议 MIT
开发语言 JavaScript
所属分类 Web应用开发、 服务器端JavaScript
软件类型 开源软件
地区 国产
投 递 者 羊舌胡非
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

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

  • 前言:一般的web工程中都会用到web.xml,web.xml主要用来配置,可以方便的开发web工程。web.xml主要用来配置Filter、Listener、Servlet等。但是要说明的是web.xml并不是必须的,一个web工程可以没有web.xml文件。 1、WEB工程加载web.xml过程   经过个人测试,WEB工程加载顺序与元素节点在文件中的配置顺序无关。即不会因为 filter 写

  • XML Web Service介绍 一个XML Web Service 是一个可编程的实体。他提供特殊功能性的元素。例如:应用逻辑。使用一些普遍存在的internet 标准(xml和http)来访问潜在分开的系统。XML Web Service依靠广泛接受的XML 和其他一些internet 标准来建立支持应用系统互相操作的基础结构。他在某种程度上解决了许多先前阻碍这样尝试的问题。       

  • 本文转载自CSDN作者“一天学亿点”,原文链接https://blog.csdn.net/weixin_46099269/article/details/106716939 报错是由于在eclipse中web-app标签的内容自动生成的有问题,按照自己的jdk版本把后面的内容改了就可以了。 web.xml各版本的约束 web-app 2.3 <!DOCTYPE web-app PUBLIC "-

  • 课程介绍 每个web 项目下都具备web.xml 文件。通过前面的学习,我们对web.xml 文件有了一定了解,但是还不够,本节课就web.xml 文件进行总结。同时对Tomcat 下的server.xml 进行介绍。 Web.xml 文件使用总结 作用: 存储项目相关的配置信息,保护Servlet(不直接把类名暴露给用户)。解耦一些数据对程序的依赖。 使用位置: (1)每个Web 项目中 (2)

  • 解决 解决修改 web.xml 和 web_merged.xml 不生效问题 前言 最近开发遇到一个奇怪的问题,就是修改web.xml后,在本地环境测试一切正常可以使用,而部署到测试环境上,修改web.xml的内容怎么都不生效。 期初是以为修改的配置没有部署到测试环境上,可是经过查看比对测试环境配置文件,是最新修改过的,没有错,但是就是不生效,真tmd头疼。 后来咨询了一下前辈,才知道真正的原因,

  •  今天尝试创建了一个MAVEN的WAR项目。遇到一个问题web.xml is missing and <failOnMissingWebXml> is set to true。  发现是缺失了web.xml。也不知道是为什么没有自动生成。于是手动生成了一个。错误消失。 再来看web.xml的配置,借鉴了一个很好的博客https://www.cnblogs.com/hafiz/p/5715523.h

  •  配置文件struts.xml和web.xml。 其实要使Struts2可以工作,配置很简单,套模板就好了。而且基本与版本无关。 如,只要struts2需要的基本jar包已经引入,那么直接配置一下web.xml和struts.xml文件。 web.xml中包含: <filter> <filter-name>struts2</filter-name> <filter-

  • web.xml中配置的DispatcherServlet。     该servelt会在服务启动的时候立即加载,并且在加载时需要一个springMVC配置文件,默认情况下,会去应用程序文件夹的web-info下找[servlet-name].xml文件,也可以把springMVC配置文件放到程序文件夹的任何地方,用init-param描述,contextConfigLocation描述的就是配置文

  • web.xml会莫名其妙的报错下面这种错误: Multiple annotations found at this line: - Attribute "xmlns:xsi" must be declared for element type "web-app". - Attribute "xsi:schemaLocation" must be declared for element typ

  • 1  .原文连接 2.原文连接2 目录 1.web.xml一般配置 1. 命名空间 2. 欢迎页面配置 3. Servlet 配置 4. Filter 配置 5. Listener 配置 6.注解配置 7.Servlet 注解配置 8. Filter 注解配置 1.c的作用和用法, 2.配置和的区别 1.web.xml一般配置 一般在 web 工程中都会用到 web.xml 来配置 Servlet

  • 1、启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点。  2、紧急着,容创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文。  3、容器将<context-param>转换为键值对,并交给servletContext。  4、容器创建<listener>中的

  • web.xml配置 什么是Web.xml Web.xml是Web应用部署的重要的描述条件,它支持的元素及属性来自于Servlet规范定义。在tomcat中,Web应用的部署描述信息文件包括tomcat/conf/web.xml以及Web应用的WEB-INF/web.xml下的文件。 ServletContext初始化参数 由于该对象比较常用,这里不做多余的描述。开发的都应该了解该对象。 <cont

 相关资料
  • 问题内容: 您是否可以与我(和社区)分享的人对Python状态机的设计技巧? 目前,我将基于以下方面来选择引擎: 但是我敢肯定,在利用Python的动态特性(例如动态调度)的同时,有很多解决方法。 我追求的是针对“引擎”的设计技术,该技术接收与基于机器“状态”的事件和“事件”相对的“事件”和“事件”。 问题答案: 我真的不明白这个问题。该 国设计模式是相当清楚的。。 这是非常常见的样板,可用于Ja

  • 关于netty的第二个问题。我们只是从它开始。我们有一个设计,我们需要使用 <罢工> 具有长轮询的HTTP HTTP流。我们估计5k-50k连接的用户打开连接。我们知道tomcat不会处理,所以我们看着netty完成任务。 设计应该足够简单,但我们不能使用websocket(我们希望在netty上使用hornetQ,并提供websocket/stomp支持),但我们不能。 因此,基本上,我们将在连

  • 须知(Caveat emptor) This document assumes that the reader generally knows how to set up a Kafka cluster and a ZooKeeper ensemble. The purpose of this guide is to identify the steps you need to take so a

  • 有人能回答我的困境,使用哪种方法将Android设备连接到mySQL或PostgreSQL? 我可以用这两种方式来做,没有任何错误和问题,没有明显的区别,但每个人都建议使用web服务而不是使用jdbc驱动程序和直接连接,

  • 本文向大家介绍基于C#实现Windows服务状态启动和停止服务的方法,包括了基于C#实现Windows服务状态启动和停止服务的方法的使用技巧和注意事项,需要的朋友参考一下 本文以实例形式展示了基于C#实现Windows服务状态启动和停止服务的方法。非常实用。分享给大家供大家参考之用。具体方法如下: 首先先引用: 然后在引用命名空间: 建立服务对象: 服务运行则停止服务: 服务停止则启动服务: 希望

  • 主要内容:基于 xinetd 服务的启动,基于xientd 服务的自启动本节学习基于 xinetd 服务的管理方法。基于 xinetd 的服务同样有启动管理和自启动管理之分,而且不管是启动管理还是自启动管理,都只有一种方法,相比独立的服务简单一些。 基于 xinetd 服务的启动 基于 xinetd 的服务没有自己独立的启动脚本程序,是需要依赖 xinetd 的启动脚本来启动的。xinetd 本身是独立的服务,所以 xinetd 服务自己的启动方法和独立服务的启动方法

  • 问题内容: 我正在开始编写Java库以实现高性能的有限状态机。 我知道那里有很多库,但是我想从头开始编写自己的库,因为那里几乎所有的库都构造了自动机,每次只处理一个就优化了。 我想知道在实现这样的高性能库时,SO社区中涉足状态机设计的人们认为最重要/最好的设计原则。 注意事项 生成的自动机通常并不庞大。(〜100-500个州)。 该实现应该能够 扩展 。 该实现应支持 快速转换 (最小化,确定化等

  • 本文向大家介绍基于python3监控服务器状态进行邮件报警,包括了基于python3监控服务器状态进行邮件报警的使用技巧和注意事项,需要的朋友参考一下 在正式的生产环境中,我们常常会需要监控服务器的状态,以保证公司整个业务的正常运转,常常我们会用到像nagios、zabbix这类工具进行实时监控,那么用python我们怎么进行监控呢?这里我们利用了python3调用psutil和yagmail这两