RO15 – 深入RemObjects SDK消息流内幕-客户端
来源:互联网 发布:江苏派逊服饰 淘宝 编辑:程序博客网 时间:2024/06/03 14:44
RO15 – 深入RemObjects SDK消息流内幕-客户端
本文深入探讨RemObjects SDK客户端调用流程内幕,向服务端发送调用,返回服务端的响应.
上图展示了客户端向服务端的一个调用: 用户代码调用本地代理的一个方法 – 如 - Sum(1,2) . 代理对象负责将调用通过网络传递给服务器,Invoker接收它并调用服务去执行Sum()方法. 返回过程与此相同,代理向用户代码返回执行结果.
上图的流程如果你只想使用RO SDK开发程序已经足够了,但是如果你想使用RO扩展你自己的组件或想了解RO的深层次技术,我们需要再向深层次挖掘.我们将上图再增加一些细节,更加详细的了解内幕
在这个图中,我们可以看到一下新的对象帮助消息传递和执行,返回执行结果.看看其中的细节:
消息(Message)
可能你很熟悉消息类,在创建服务端和客户端的时候都会拖放消息控件.但是消息是做什么的呢?
消息对象用来分割方法调用信息的,将服务名,调用的方法名,需要传递的参数封装起来.不同的消息使用不同的方式完成这个任务,RO提供了两种消息类型: BinMessage 和 SOAPMessage.
第一个问题,如何将这些信息写入消息对象的?如果查看RO为你调用的每个服务自动生成的代理代码(**_Intf.pas file), 你将发现如下内容:
function TNewService_Proxy.Sum(const A: Integer;
const B: Integer): Integer;
var __request, __response : TMemoryStream;
begin
__request := TMemoryStream.Create;
__response := TMemoryStream.Create;
try
__Message.Initialize(__TransportChannel, 'NewLibrary',
__InterfaceName, 'Sum');
__Message.Write('A', TypeInfo(Integer), A, []);
__Message.Write('B', TypeInfo(Integer), B, []);
__Message.Finalize;
...
由于代码生成单元的每个函数的参数都是已知的,所有可以创建Delphi代码将参数写入到消息中.首选消息使用库名称,接口服务名称和要调用的方法名称初始化.接下来,使用Write()方法加入每个参数,最后完成完成.现在消息对象将信息写入流中发送到网络.
使用不同的消息格式会有微小的差距.
使用不同的消息格式会有微小的差距.
...
__Message.WriteToStream(__request);
__TransportChannel.Dispatch(__request, __response);
__Message.ReadFromStream(__response);
...
在代理的代码中我们看到消息内容写入流,通过传输通道传输. 最终我们得到响应,处理会继续进行,但我们不在深入.
传输通道
像消息类,你可能也很属性传输通道了,因为RO会在组件面板上安装各种类型的通道控件.多数通道都与服务端做一对一的映射,但是有些更通用可以和不同的服务端连接 (如HTTP或 TCP).
传输通道的工作和简单:调用Dispatch() 将信息流传递给IntDispatch,这是一个在TROTransportChannel中定义的虚拟方法,在子类中根据具体情况重写(Override).根据通道类型的不同,方法可能会建立与服务器的网络连接发送Email或使用本地通讯如Window消息机制或命名管道连接到服务器.管道与服务端对话后, 就会向服务端传递请求流并最终返回服务端响应信息.
- RO15 – 深入RemObjects SDK消息流内幕-客户端
- RO15 – 深入RemObjects SDK消息流内幕-客户端
- RO46 – 如何写RemObjects SDK 客户端 (.NET Version)
- RO46 – 如何写RemObjects SDK 客户端 (.NET Version)
- RemObjects SDK
- 在RemObjects SDK的服务端捕获客户端请求
- RO06 -如何编写RemObjects SDK客户端 (Delphi Version)
- RO11 -用RemObjects SDK创建异步调用客户端
- Remobjects SDK 服务器断线后,客户端重新连接的解决方法
- RO11 -用RemObjects SDK创建异步调用客户端
- RO38 –比较RemObjects SDK 通道
- RO38 –比较RemObjects SDK 通道
- RemObjects SDK 简介
- RemObjects Sdk 使用简述
- RO01 - RemObjects SDK 综述
- RemObjects SDK 简介[转载]
- 初试RemObjects SDK
- RemObjects SDK 9.0 Beta_CodeFirst
- Atftpd Manual 中文手册
- MySQL常用操作指令
- Zend Framework 0.1.3 Released铪铪铪
- 如何定义测试用例的质量标准?
- MySQL主从服务器复制同步设置
- RO15 – 深入RemObjects SDK消息流内幕-客户端
- 插件系统框架分析
- 《软件过程管理》电子课件
- 饺子的10种包法
- 做事的态度与工作态度
- 锻造软件需求人员的六大要素
- 连接PHP和 Java -- PHP/Java Bridge [3]
- 安装完成aspnet_reqsql后部分web.config文件失去智能感知的原因
- 一次痛苦的真实经历——感慨国产软件的质量