使用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工具,该工具包含了几个常用方法,方便程序员对数组进行加工操作 ...
随机推荐
- oracle跟踪sql语句
oracle跟踪sql语句 select * from v$sql 查询客户端电脑名称的ID select terminal, SID,SERIAL# from v$session where ( ...
- 程序员必看:给你一份详细的Spring Boot知识清单
在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架.或许从命名上就能看出这个框架的设计初衷:快速的启动Spring应用.因而Spring Boot应用本质上就是一个基于Sp ...
- 安装vue.js
1. 下载node https://nodejs.org/dist/v8.11.2/node-v8.11.2-x64.msi 2. 查看npm版本 在cmd下输入命令:npm -v 如果低于3.0版 ...
- socket 网络连接基础
socket 客户端 import socket 1.client = socket.socket() # socket.TCP/IP 选择连接的类型,默认为本地连接 2.client.connec ...
- eclipse xDoclet错误
转载: http://blog.csdn.net/lovelongjun/article/details/53485773 Missing library: xdoclet-1.2.1.jar. Se ...
- redis之RDB持久化与AOF持久化
Redis是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对,为了方便起见,我们将服务器中的非空数据库以及它们的键值对统称为数据库状态. 因为Red ...
- mysqldump之不老将
–add-drop-database 每个数据库创建之前添加drop数据库语句.mysqldump -uroot -p –all-databases –add-drop-database –add-d ...
- 使用innodb_force_recovery解决MySQL崩溃无法重启问题
因为日志已经损坏,这里采用非常规手段,首先修改innodb_force_recovery参数,使mysqld跳过恢复步骤,将mysqld 启动,将数据导出来然后重建数据库.innodb_force_r ...
- 【341】Numpy 相关应用
Numpy_01 >>> from numpy import pi >>> np.linspace(0, 2, 9) array([0. , 0.25, 0.5 , ...
- 多线程-threading
多线程-threading python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用 1. 使用threading模块 ...