uniGUI HyperServer 是一种新的服务器体系架构, 旨在高度提高 uniGUI 应用程序的可用性、稳定性和特定的可伸缩性。 这一目标是通过应用业界已知和广泛使用的技术 (如负载平衡和过程回收) 实现的。

传统的 uniGUI 应用程序服务器由一个单独的进程和多个线程组成。 单个进程可以是 uniGUI 可执行文件或 ISAPI 或 Apache 工作进程。 在所有情况下, 所有会话都驻留在单个进程中, 并且在同一进程中有多个线程用于处理传入的请求。

uniGUI HyperServer 改变了模型, 变成了一个多进程多线程模型。 在这个新模型中, 会产生几个工作进程来服务同一 web 应用程序。 会话将在工作进程之间划分, 并且基于配置, 您可能有多个工作进程用于相同的 uniGUI 应用程序。 工作进程由另一个实际上叫 HyperServer 进程来管理和调度。 HyperServer 将是所有客户端请求的入口点。 HyperServer 将接受所有请求并将它们分发到工作进程中。 HyperServer 还有责任在需要时生成新的工作进程, 并在不再需要时回收它们。 由于 uniGUI 会话是有状态的, 因此 HyperServer 的另一个重要职责是将传入的会话请求定向到创建该特定会话的正确的工作进程。 在 HyperServer术语中, 每个工作进程称为一个节点。

在继续之前,我们先来学习一下HyperServer引入的几个新术语。

HyperServer

HyperServer是所有请求的主要入口点。它将过滤请求并将它们引导到相应的节点。如果请求未与节点关联,则HyperServer将根据负载分配算法将其定向到任意节点。 HyperServer还负责创建新节点并在需要时回收它们。

毋庸置疑,HyperServer本身是一个uniGUI应用程序,专为此特定目的而设计。 HyperServer以预编译的二进制文件(Exe和Dll)的形式部署。可用的部署选项包括:独立服务器,ISAPI模块和Windows服务。将来HyperServer组件将包含在uniGUI库中,因此开发人员将能够创建自己的自定义HyperServers。

Node(节点)

HyperServer节点实际上是一个工作进程。同时,uniGUI应用程序本身也以独立的EXE模式部署。开发人员将以Node的形式部署他们的应用程序。开发人员在设计Node应用程序时不需要采取任何特殊设计,跟开发任何标准的uniGUI应用程序是一样的。

Node Id(节点ID)

每个节点都有一个唯一的节点ID。在创建节点时分配节点ID。当节点被回收时,将重新使用节点ID。

Transport(传输通道)

HyperServer使用传输通道在内部与节点通信。目前仅实现HTTP传输通道。未来,将基于各种技术实现其他的Transport,如Wiidows Pipes,TCP和UDP。

Node Recycling(节点回收)

节点将根据预定的设计方案进行回收,当需要回收节点时,将请求关联的进程做终止操作并在确认此请求后,Node将开始终止其所有会话并最终终止其进程。如果节点未确认回收请求,则HyperServer将强制终止该请求。

Active Node(激活节点)

活动节点是那些主动服务会话的节点,他们能够接受新的会话。

Suspended Node(挂起结点)

挂起的节点是无法与HyperServer通信的节点。在正常操作下,HyperServer会以特定间隔轮询其所有节点。如果其中一个节点未能响应,则将其标记为已暂停。如果节点在一定量的重试后未能响应,则它将被视为失败的节点并将被清除。

Purged Node(清除节点)

清除节点是从活动节点列表中删除并发送到回收队列的节点。清除节点既不接受新会话也不处理任何传入请求。下次清理回收队列时,它将从进程空间中删除。

Discarded Node(丢弃节点)

丢弃节点是实际拥有多个会话的节点,但它不接受新会话。它将继续存在,直到所有会话终止。在没有剩余会话时,它将被清除。

Persistent Node Zero(零持久节点)

零持久节点是一个Id = 0的节点,它保证持续运行,虽然偶尔也会像其他节点一样被回收,但在回收后会立即重新加载,不会被永久卸载。持久节点的主要目的是确保一次至少运行一个节点。考虑一种情况,一个uniGUI应用程序需要在线程中执行后台任务,这个任务可能利用放置在ServerModule上的TUniThreadTimer中执行。在传统的uniGUI应用程序中,只有一个进程,因此后台任务可以保证以Singleton的形式运行。但是,在同时运行同一进程的多个副本的HyperServer中,应该有一种机制来确保您的Singleton方法仅在其中一个节点中运行。零持久节点选项完美地满足此目的。您需要做的就是启用此选项并检查uniGUI应用程序中的Node Id。如果名为NodeZero的ServerModule中的布尔属性为True,则运行后台任务是安全的。

在下面的代码中,只在当前节点是Node Zero(Node Id = 0)时才执行ThreadTimer事件。

procedure TUniServerModule.UniThreadTimer1Timer(Sender: TObject);
begin
if NodeZero then // run code if I'm Node #0
begin // Your task here end;
end;

或者,如果您计划使用HyperServer或传统的单一进程模式部署应用程序,则可以使用以下语法。

procedure TUniServerModule.UniThreadTimer1Timer(Sender: TObject);
begin
if NodeZero or (not NodeMode) then // run code either if I'm Node #0 or I'm not a Node!
begin // Your task here end;
end;

uniGUI HyperServer的更多相关文章

  1. 安装和配置HyperServer

    总述 安装和配置HyperServer非常简单.直接. uniGUI安装程序在.. \uniGUI\HyperServer\bin\文件夹(\bin64\用于64位二进制文件)下分发了HyperSer ...

  2. 深入了解HyperServer

    本文,我们将尝试深入了解uniGUI HyperServer. 可以将HyperServer所有功能分成三类: HyperServer和稳定性 HyperServer和可扩展性 HyperServer ...

  3. 基于uniGui开发的Delphi后台管理框架uniFramework

    uniGui是基于Delphi的一套开发Web应用的UI框架,前端使用的是ExtJS,最新版的uniGUI1.5 1480已支持新版的ExtJS6.5.3.我认为uniGUI是目前Delphi下最完善 ...

  4. HyperServer 中的 SSL 支持

    HyperServer 中的 SSL 支持 DLL 模式不需要 SSL 配置, 因为 web 服务器 (如 IIS) 将承担 ssl 配置和 ssl 证书的责任. 对于独立和服务模式, ssl 配置是 ...

  5. nginx实现unigui群集

    nginx实现unigui群集 在笔者写此文的时候,UNIGUI1.50.x的版本已经发布,其提供的HyperServer已经支持群集. 有网友还专门为此做了群集方面的测试: 从上图可以看出:群集总共 ...

  6. UniGui安装(01)

    UniGui安装.Delphi10和uniGUI1.90.0.1509 1]下载 2]安装 3]目录说明 1]下载 在我百度网盘里  uniGUI1-90-0-1509.zip https://pan ...

  7. uniGUI试用笔记(十三)调用WebService

    今天尝试用uniGUI做Web服务器,调用应用服务器的WebService,遇到些问题记录下来备忘. 1.对WebService的调用同一般App程序,只是注意如果WebService的执行时间较长, ...

  8. unigui数据库连接池

    UNIGUI for delphi,是一款WEB RIA开发框架.开发WEB程式如传统C/S般简单,众多DELPHIER趋之若鹜. 虽然上手非常容易,但要真正使用好,有些地方还是值得考究的. 网上有同 ...

  9. unigui的页面布局使用

    (unigui的页面布局还是很强大的,基本什么的排版都能搞好.前面部分为原文章翻译,翻译不一定很准确,就能看吧,后面有使用说明,有什么不明白的欢迎加我QQ(910300653)一起交流学习) 一.布局 ...

随机推荐

  1. Django中模型层中ORM的多表操作

    ORM的多表创建(一对一.一对多,多对多): 1模型创建 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等 ...

  2. phpmyadmin getshell

    执行SQL语句:SET GLOBAL general_log = ON

  3. oracle登陆触发器及精细审计

    --oracle精细审计FGAselect tab2.userhost 引起操作的主机名,tab2.os_user 引起操作的主机用户,tab2.object_schema 被操作对象所属用户,tab ...

  4. noip2014无线网络发射器选址

    题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的 129 条东西向街道和 129 条南北向街道所形成的网格状,并且 ...

  5. Qt一步一步实现插件通信(附源码)

      前一章已经实现了主程序调用加载插件功能,这一章描述主程序和插件间通信功能 说道Qt的通信必须要了解信号和槽的机制原理,这里不做论述,不清楚的同学去看看信号和槽机制 不废话直接上步骤,在上一章的基础 ...

  6. PowerShell使用教程

    一.说明 1.1 背景说明 个人对PowerShell也不是很熟悉,开始的时候就突然看到开始菜单中多了个叫PowerShell的文件夹,后来一点就看到某个教程视频说PowerShell很厉害但也没怎么 ...

  7. shell历史简介

    shell也叫做终端.命令行. shell的基本作用是供用户输入命令.解析用户所输入命令.呈现命令执行结果. shell有多种不同的shell其语法会有差异,这也是严谨的sh文件会在首行以“#!/bi ...

  8. angular4,angular6 父组件异步获取数据传值子组件 undefined 问题

    通过输入和输出属性 实现数据在父子组件的交互在子组件内部使用@input接受父组件传入数据,使用@output传出数据到父组件详细标准讲解参考官方文档https://angular.cn/guide/ ...

  9. Win10系列:JavaScript 项目模板中的文件和项模板文件

    通过上面内容的学习,相信读者已经对各种项目模板和项模板有了大致的了解,本节将进一步介绍项目模板中默认包含的项目文件以及项模板文件,首先讲解这些文件中的初始内容以及作用,然后介绍在一个页面中如何添加控件 ...

  10. 微信公众号 access_token 没有过期 却失效

    最近在开发微信项目的时候 access_token   缓存到 redis里面的,明明在两个小时的有效期内  微信却提示 "errcode":40001,"errmsg& ...