1.AppWeb 组件:
http web、http client、管理和监控流程、Esp Web框架、可加载CGI,Ejscript,esp,php、ssl/TLS 、支持其他web框架
2.设计目标:
最快,小型,高效web服务器
3.目标用户:
嵌入式设备
4.内部:
事件驱动型,多线程http管道,上面可加载模块以提供内容特定处理,并扩展其功能。
appweb如下特征:
基于请求引擎的高性能事件;用于同步和异步处理的多线程核心;具有动态模块加载的模块化结构;基于垃圾收集器的内存分配器提供快速分配和消除内存泄露;可移植的运行层来隔离平台依赖性;"沙箱"限制资源消耗可执行更多健壮的操作;安全编程层,以防止缓冲区溢出;apache 配置兼容;日志记录和调试跟踪器。
请求管道:
Appweb有一个高效的零拷贝请求双向管道来处理请求和生成响应。这包括队列、包、缓冲和事件调度机制。管道架构是高度优化的,支持数据的高效传输而不需要复制。它使用sendfile, async I/O和vectored,scatter/gather写入网络,以避免在写入网络之前在一个缓冲区中花费大量的数据和头信息。
(1)HTTP 核
Appweb HTTP核心负责解析传入的HTTP请求。HTTP请求第一行指定请求URI资源,请求头提供额外的上下文。HTTP核心存储解析的头,供路由引擎使用,并创建一个新的请求管道来处理请求。传入和传出的管道是分别构建的,因为每个方向可能需要不同的过滤器集。
(2)路由引擎
路由引擎根据已配置的请求路由匹配请求,并选择请求的最佳路由。路由指定处理程序来管理请求和其他上下文(如在何处查找要服务的文档)。路由引擎可以重写请求,然后重新路由。该引擎还管理HTTP授权。根据请求的URI和头部,将选择适当的处理程序。有用于ESP、PHP、CGI和静态文件数据的处理程序
(3)处理
处理程序负责接收请求并创建响应。它基于HTTP请求URI、头、任何关联的主体数据和潜在的应用程序会话状态生成响应内容。输出数据流经输出管道,然后通过网络连接器传输给客户端。
每个请求都有一个处理程序。Appweb核心选择基于请求匹配算法的处理程序。处理程序通过AddHandler和SetHandler指令在Appweb配置文件中配置。
(4)过滤
过滤器的工作是以某种方式排列数据并将其传递到管道中的下一个阶段。过滤器将一个连接到另一个,多个过滤器可以在进出管道的方向上使用。
过滤器的顺序通常很重要。例如,加密前压缩数据与加密后压缩不同。Appweb提供AddInputFilter和AddOutputFilter指令来帮助构建过滤器管道。
Appweb使用过滤器实现传输授权、块编码和HTTP远程请求。通过使用过滤器实现这些特性,它们将自动成为所有处理程序和所有内容类型的可用对象。
(5)连接器
连接器负责将输出数据传输到客户端。它接收一组表示要发送给客户端的数据的数据包。连接器负责请求Appweb HTTP核心创建一个带有HTTP响应头的包。在这个阶段,Appweb可以确定是否可以将TCP/IP连接保留到同一连接上的后续请求。
安全:
大多数web服务器都已逐渐变得更加安全,因为有一个痛苦的补丁程序。从一开始就开发一个安全的web服务器要比在事后尝试移植安全性要容易得多。确保嵌入式web服务器比企业web服务器更加困难,因为它必须在不增加内存占用或降低性能的情况下完成
便携式运行(MPR)
Appweb的设计目的是通过使用一个可移植的(MPR)来确保安全。MPR是一个跨平台的层,允许超过97%的Appweb代码是可移植的。它包括许多帮助创建安全应用程序的机制。一个这样的设备是一个安全的字符串和缓冲处理模块,以帮助消除困扰许多产品的缓冲区溢出
沙箱
Appweb通过一种称为“沙箱”的技术来密切控制系统资源的使用。这意味着在严格控制的范围内运行web服务器,因此请求错误不会危及系统操作。Appweb也对几种常见的拒绝服务攻击进行了强化。
Appweb可以配置为:
预先分配内存,不能超出预定义的内存限制。拒绝太大的请求。拒绝太长的url。运行单线程或使用有限的可重用线程池来服务请求。由指定的用户帐户或用户组运行。
为了在此基础上构建,Appweb还提供了一个安全套接字层和摘要身份验证。
appweb 部署模型:
(1)作为一个独立的web服务器
Appweb分发包含一个健壮的、安全的、独立的web服务器。二进制安装将安装此web服务器,以作为系统守护进程/服务自动启动。它由一个管理程序进行监督,它作为一个守卫来启动、监视和重新启动Appweb(如果需要的话)
(2)嵌入在应用程序和设备中
Appweb提供了一个可嵌入的服务器和客户端库,以便任何应用程序都可以支持web。当嵌入时,应用程序可以提供数据并通过HTTP响应请求。对于设备,Appweb可以配置最小的功能集,以减少内存和安全占用
(3)支持前端web服务器
当在反向代理后面运行时,Appweb是一个理想的应用程序web服务器。反向代理将传入的请求分派给一组Appweb实例,这些实例可以有效地托管ESP或PHP应用程序。
处理架构
事件驱动多线程
虽然Appweb是多线程的,但它不使用每个请求的线程。一个高性能线程池用于临时处理工作线程,以服务传入的请求。在等待传入和传出I/O时,工作线程被返回到池中以供其他请求使用。这种架构通过重用线程来最小化内存使用,并且由于线程池而提供了出色的性能。此外,它可以很好地伸缩,因为一个线程可以服务许多请求。
组件分析
1.核心Appweb HTTP服务器
与在其上运行的动态模块相比,核心Appweb HTTP服务器是Appweb产品相对较小的组件之一。核心服务器为处理程序、过滤器和连接器提供了一组服务,以便在向客户端提供内容时使用。目标是将模块的任何设施集中起来,这样它就不会被复制
核心服务包括:
主要的HTTP处理和套接字通信、初始化和解析Appweb配置文件、服务器、虚拟主机和目录授权管理、请求管道管理和请求处理。
核心服务器还配置和实施配置文件中请求的任何沙箱资源限制,例如:线程限制和请求URI和主体大小限制。这使Appweb在使用系统资源时具有确定性,并成为一个优秀的系统公民。可以配置核心Appweb服务器来执行单线程或多线程。使用适当的沙箱限制,如果需要,它可以提供每秒数千个请求。
appweb配置
Appweb使用Apache样式配置文件。这个配置文件是在Appweb启动时读取的,它管理Appweb配置的每个方面,包括侦听的端口和地址、加载的模块、在哪里找到web页面以及如何记录请求。
配置文件支持各种各样的指令,如虚拟主机、目录认证、端口绑定、别名、日志记录和请求管道配置。它有条件声明,并支持包含其他配置文件。Appweb使用一个配置文件的单遍遍历,这意味着指令的顺序很重要。
请求处理
Appweb HTTP核心管理请求的处理和请求处理管道的构建。当一个新的HTTP请求到达时,Appweb将检查请求到达的网络接口,如果它被分配给一个基于IP的虚拟主机,Appweb将路由请求由该虚拟主机处理。如果配置了基于名称的虚拟主机,则必须延迟对该请求进行处理的决定,直到HTTP头被解析,并且默认服务器被用于初始解析请求
请求路由
Appweb有一个强大的请求路由引擎,它处理客户端HTTP请求。引擎配置了来自Appweb配置文件的一组路由。当收到请求时,它将测试各种路由,并选择处理请求的最佳路径。在此过程中,路由可以根据需要重定向或重写请求。
一个Appweb配置通常有许多路由。通过将路由正则表达式模式与请求URI匹配,对配置的路由进行测试。一条路线可能要求在适当处理请求之前满足进一步的先决条件。如果不满足所需条件,则将测试配置中的下一条路由。如果所有以前的路线都不合格,那么总有一条路线可以处理请求。