使用delphi 开发多层应用(二十三)KbmMW 的WIB
解释WIB 是什么之前,先回顾以下我们前面的各种服务工作方式。前面的各种服务的工作方式都是请求/应答方式。
客户端发送请求,服务器端根据客户端的请求,返回相应的结果。这种方式是一种顺序式访问,是一种紧耦合的方式。
服务器被动接受访问,服务器无法直接给客户端发消息。针对这种情况出现了发布/订阅方式。现在这种方式很热呀!
发布/订阅方式类似出版社发行杂志,出版社每年要求大家订阅杂志,当你订阅后,每月到时,不管你有没有问,
杂志都会准时送到你家门口。对于计算机系统类似,当你订阅了服务器上的某种消息后,不管你是否一直访问?当服
务器上的这个消息来时,客户端就会自动触发消息事件。客户端就可以针对该消息进行相应的处理。
每一个发布者与订阅者连接在一个虚拟的总线上,这个总线就叫WIB(Wide Information Bus).叫Information Bus,
是因为这是一个虚拟的信息传输通道。wide 是因为这个总线可以传输任何KbmMW 识别的数据类型。比如说数组、流、
数据集等等。
任何连接在WIB 上的服务器或者客户端都可能作为发布者或者是订阅者,因此在WIB 里面不再区分服务器与客户端,
统一将他们称为节点(nodes).任何节点都可以生产或者消费消息。
WIB 既可以在一个局域网内,也可以跨越到intranet,乃至这个internet 上。
下图是一个典型的多网段的发布/订阅方式的原理图
上图中所有的服务器与PC 都是节点。当然有的只发布信息,有的只接受信息,有的即发布信息也接受信息。既然是发布/订阅方式,作为双方通信,
肯定就要一个主题(subject). 发布者发布主题,订阅者订阅主题。当发布者发布一个主题时,根据订阅者的要求。发送到对应的订阅者。
在KBM中,主题是一个支持通配符的字符串组成的,类似上面图里面的MSG.A.B.C,每个. 表示不同的消息划分。主题的开始必须是这些
打头的:MSG, REQ, RES, SUB, USB, CAC,THR, SRV。
先简单的说一下消息匹配的方式,比如说发布的主题为: MSG.F.G, 那么订阅者可以订阅MSG.F.G, 也可以订阅MSG.*.G
也可以订阅MSG.F.> . 上面三种方式都可以收到订阅的消息。
使用delphi 开发多层应用(二十三)KbmMW 的WIB的更多相关文章
- 使用delphi 开发多层应用(二十一)使用XE5 RESTClient 直接访问kbmmw 数据库
delphi XE5 出来了,增加了android 的开发支持,另外增加了一个RESTClient 来支持访问REST 服务器. 这个功能非常强大,可以直接使用非常多的REST 服务器.同时也可以支持 ...
- iOS11开发教程(二十三)iOS11应用视图实现按钮的响应(3)
iOS11开发教程(二十三)iOS11应用视图实现按钮的响应(3) 2.使用代码添加按钮实现的响应 使用代码添加的按钮,实现响应需要使用到addTarget(_:action:for:)方法,其语法形 ...
- 使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器
从kbmmw 4.4 开始,增加了认证管理器,这个比原来的简单认证提供了更多的功能.细化了很多权限操作. 今天对这一块做个介绍. 要做一个认证管理,大概分为以下5步: 1. 定义你要保护的资源,一般 ...
- 使用delphi 开发多层应用(二十四)KbmMW 的消息方式和创建WIB节点
KbmMW 中支持基于UDP的消息广播,也支持TCP/IP hub/spoke 方式,还有 基于UDP或者TCP/IP 的点对点的消息传输. 1.基于UDP的消息广播
- 使用delphi 开发多层应用(十六)使用XMLRPC 实现basic4android 远程调用RTC服务(讲述了RTC的特点,其底层通讯协议是自己封装SOCK 库,与kbmmw 的适合场合不完全一样)
RealThinClient (以下简称RTC) 也是一款delphi 多层开发的框架,由于其底层通讯协议是自己封装SOCK 库,抛弃了 大家诟病的indy,因此表现的非常稳定,效率也非常高, ...
- 使用delphi 开发多层应用(十九) ios通过soap 访问kbmmw服务器
随着delphi XE4 的推出,开始真正意义上支持ios 的开发,由于目前kbmmw 还不完全支持ios 的开发,因此 无法直接使用kbmmw 的客户端访问kbmmw 的服务器(虽然kbmmw 也提 ...
- UWP开发入门(二十三)——WebView
本篇讨论在UWP开发中使用WebView控件时常见的问题,以及一些小技巧. WebView是实际开发中常用的控件,很多大家抱怨的套网页的应用都是通过WebView来实现的.这里要澄清一个问题,套网页的 ...
- 转(Delphi 新窑洞):使用delphi 开发多层应用(十七)使用RTC web 服务器返回JSON
RTC作为delphi 的最专业的web 应用服务器,如果客户端要使用JSON 的话,那么使用RTC 应该也是一种 非常好的选择.下面我们做一个使用RTC web 服务器返回数据库JSON 的例子. ...
- Java开发笔记(二十三)数组工具Arrays
数组作为一种组合形式的数据类型,必然要求提供一些处理数组的简便办法,包括数组比较.数组复制.数组排序等等.为此Java专门设计了Arrays工具,该工具包含了几个常用方法,方便程序员对数组进行加工操作 ...
随机推荐
- HTML5拖动
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- C++实现ping功能<转>
今天接到需求要实现ping的功能,然后网上查了一些资料,对网络编程的一些函数熟悉了一下,虽然还有一些细节不清楚,但是慢慢积累. 要实现这样的功能: 基础知识 ping的过程是向目的IP发送一个type ...
- tensorflow Process finished with exit code 137 (interrupted by signal 9: SIGKILL) 错误
Process finished with exit code 137 (interrupted by signal 9: SIGKILL) 在使用tensorflow自带的数据集做手写数字识别的时候 ...
- Haskell语言学习笔记(65)Data.HashMap
安装 unordered-containers $ cabal install unordered-containers Installed unordered-containers-0.2.9.0 ...
- Containerpilot 配置文件模板
{ "consul": "{{ .CONSUL }}:8500", "logging": { "level": &quo ...
- pip & Jinja2
[pip&Jinja2] 2.7.9 以及上版本的 python 安装程序会自动安装 pip. 升级:pip install --upgrade pip. 使用pip安装Jinja2:sudo ...
- java基础五 [数字与静态](阅读Head First Java记录)
本章主要讲了静态变量.静态方法,final关键词.以及介绍了怎么对数字和日期进行格式化输出.这里对这些内容进行了整理.本章还介绍了java.util.Date和java.util.Calendar来操 ...
- django创建工程,用命令
django创建工程的命令 >>python C:\Python33\Lib\site-packages\django\bin\django-admin.py startproject p ...
- HTML5 historyState pushState、replaceState
DOM中的window对象通过window.history方法提供了对浏览器历史记录的读取,让你可以在用户的访问记录中前进和后退. 从HTML5开始,我们可以开始操作这个历史记录堆栈. 1.Histo ...
- TZOJ 2754 Watering Hole(最小生成树Kruskal)
描述 Farmer John has decided to bring water to his N (1 <= N <= 300) pastures which are convenie ...