xmlweb 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
xmlweb 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
xmlweb 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !

软件简介

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

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
发表了资讯
09/19 16:34

Web 服务软件 xmlweb 更新,添加 https 支持

xmlweb 是一个基于状态机理论设计的 web 服务器,使用它可以设计出高可读性、高可维护性的 web 服务应用。你可以使用它作为 express 或者 koa 的一个替代。 最近更新,添加 https 支持。使用方式类似 HTTP 组件,但使用时需要提供私钥以及证书文件路径。 <i:HTTPS listen='80' key='./privatekey.pem' cert='./certificate.pem' xmlns:i='//xmlweb'> <i:Router url='/index.html'/> <Hello id='hello'/> </i:HTTP...

0
1
发表了资讯
2017/06/14 11:05

xmlweb 1.1.18 发布,基于状态机理论设计的 Web 服务器

xmlweb 1.1.18 发布了,该版本的更新内容如下: 给静态组件 Static 添加断点续传支持,也就是可以处理 Ranges 了 给静态组件 Static 添加 ETag 支持,原来是通过时间判断的 将错误处理模块独立出来并移至 HTTP 组件中,从而简化错误处理逻辑 xmlweb 是一个基于状态机理论设计的 Web 服务器,使用它可以设计出高可读性、高可维护性的 Web 服务应用。你可以使用它作为 express 或者 koa 的一个替代。...

11
10
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
2015/07/02 18:04

Spring笔记 - IoC容器

1. IoC容器 负责Bean的实例化、注入、生命周期方法管理,包括以下类型接口,前者更强大更常用 ApplicationContext BeanFactory (本文忽略此类型) 1.1 ApplicationContext - AppCtx负责实例化、配置和装配托管Bean - AppCtx间接继承了BeanFactory,其继承的接口有:EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver 1.1.1 ApplicationCo...

0
1
发表了博客
2012/07/23 13:09

10个让朋友对你刮目相看的CoffeeScript单行代码绝技

或许你已经看过了Marcus Kazmierczak的这篇在HN上颇受欢迎的“10个让朋友对你刮目相看的Scala单行代码绝技”了, 尽管我对Scala并不了解(Java也是),但是这看起来还真不错,于是我也有点手痒, 想让我的朋友们也对我刮目相看一小下——不过不是从Java到Scala,我是从Javascript到CoffeeScript, 下面的例子都是基于node.js环境的。 1. 列表中的每项乘2 Marcus的第一个例子演示了map函数,我们可以使用range语法以及一个匿名函...

0
2
发表了博客
2012/08/14 12:47

10个让朋友对你刮目相看的CoffeeScript单行代码绝技

或许你已经看过了Marcus Kazmierczak的这篇在HN上颇受欢迎的“10个让朋友对你刮目相看的Scala单行代码绝技”了, 尽管我对Scala并不了解(Java也是),但是这看起来还真不错,于是我也有点手痒, 想让我的朋友们也对我刮目相看一小下——不过不是从Java到Scala,我是从Javascript到CoffeeScript, 下面的例子都是基于node.js环境的。 1. 列表中的每项乘2 Marcus的第一个例子演示了map函数,我们可以使用range语法以及一个匿名函...

0
2
发表了博客
2012/08/14 08:26

10个让朋友对你刮目相看的CoffeeScript单行代码绝技

或许你已经看过了Marcus Kazmierczak的这篇在HN上颇受欢迎的“10个让朋友对你刮目相看的Scala单行代码绝技”了, 尽管我对Scala并不了解(Java也是),但是这看起来还真不错,于是我也有点手痒, 想让我的朋友们也对我刮目相看一小下——不过不是从Java到Scala,我是从Javascript到CoffeeScript, 下面的例子都是基于node.js环境的。 1. 列表中的每项乘2 Marcus的第一个例子演示了map函数,我们可以使用range语法以及一个匿名函...

0
2
发表于服务端专区
2012/07/23 11:33

10个让朋友对你刮目相看的CoffeeScript单行代码绝技

或许你已经看过了Marcus Kazmierczak的这篇在HN上颇受欢迎的“10个让朋友对你刮目相看的Scala单行代码绝技”了, 尽管我对Scala并不了解(Java也是),但是这看起来还真不错,于是我也有点手痒, 想让我的朋友们也对我刮目相看一小下——不过不是从Java到Scala,我是从Javascript到CoffeeScript, 下面的例子都是基于node.js环境的。 1. 列表中的每项乘2 Marcus的第一个例子演示了map函数,我们可以使用range语法以及一个匿名函...

2
26
2020/09/19 20:20

良心推荐!Python爬虫高手必备的8大技巧!

想要快速学习爬虫,最值得学习的语言一定是Python,Python应用场景比较多,比如: **Web快速开发、爬虫、自动化运维等等,** 可以做简单网站、自动发帖脚本、收发邮件脚本、简单验证码识别脚本。 爬虫在开发过程中也有很多复用的过程,今天就总结一下必备的8大技巧,以后也能省时省力,高效完成任务。 **1、基本抓取网页** get方法 ``` import urllib2 url = "http://www.baidu.com" response = urllib2.urlopen(url) print re...

0
0
发表了博客
2016/05/18 18:04

C#系统命名空间[精心整理的…

一、基础命名空间 System.Collections 包含了一些与集合相关的类型,比如列表,队列,位数组,哈希表和字典等. System.IO 包含了一些数据流类型并提供了文件和目录同步异步读写. System.Text 包含了一些表示字符编码的类型并提供了字符串的操作和格式化 System.Reflection 包括了一些提供加载类型,方法和字段的托管视图以及动态创建和调用类型功能的类型. System.Threading 提供启用多线程的类和接口. 二、图形命名空间 System.Dra...

0
0
发表了博客
2011/07/29 11:23

WEB SERVICE的价值与特性==》同步OR异步?

1.1、Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。 XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础。 Soap:(Simple Object Access Protocol)简单对象存取协议。是XML...

0
2
发表了博客
2019/05/13 10:32

c#调用

一、基本概念   Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。简单的理解就是:webservice就是放在服务器上的函数,所有人都可以调用,然后返回信息。 比如google就有一个web service ,你调用它就可以很容易的做一个搜索网站。 就像调用函数一样,传...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
10 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部