现在的位置: 首页 > 综合 > 正文

R003-Remote Invocation

2013年02月27日 ⁄ 综合 ⁄ 共 3762字 ⁄ 字号 评论关闭

R003-Remote Invocation

Remote Invocation可以让客户端像调用本地方法一样调用远程服务器上的方法.这个过程叫做Remote Procedure Call (RPC).

为了实现这个功能,客户端首先就要和一个类似于远程服务器的代理对象接口通讯.

这个代理对象叫做代理(proxy). 代理可以将方法调用转换成流在网络中传递.

服务器端接收到这个数据包,欢迎他的信息,调用真正的方法. 最后将执行结合或错误信息打包发送到客户端的代理.

最后,代理发送执行结果给调用者.像调用本地方法一样.

RemObjects SDK 3.0 简介中我们看到了他的新特性和工具,这些都可以给我们开发方式带来很大的改进. 这篇文档我们看看关于产品的概况和令人兴奋的新特性.

Service Tester 用处

分布式系统提供的灵活性和适用性是传统的CS结构无法比拟的. 但是开发和测试分布式系统通常复杂费时.在基于服务的客户端程序开发中我们只是调试本程序还是不够的,还有大量的交互式请求和特定的服务过程大量触发的效率等.

一般的测试方案产生出脚本并测试最终用户应用, 但不能做到真正的模拟大量用户来代理远程服务器或使用一些RemObjects 特性.

这样你可以自己写测试应用程序或使用像DUnit的测试工具,但是还要有很多工作要作.

RemObjects服务测试(ROST) 可以解决这些问题. 为每个服务方法产生测试脚本并使用多线程并发调用这些方法.测试完成ROST提供测试图解,其他的事物,每秒钟请求数量,网络传输情况等信息. 测试脚本可以保存,你修改了远程服务方法后可以再次运行查看修改后对系统效率和功能改善.

ROST支持所有数据类型: 简单数量类型,复杂的结构体,二进制流和数组. 通过直观的界面可以输入测试函数的参数并观测最终执行结果.

下面的截图可以看到如何启动ROST来执行MegaDemo 中的EchoPerson 方法:


下面的截图是测试正在进行时的情况:

ROST经配置后使用RemObjects SDK提供的所有通道(channels)和消息(message).

下面的截图显示连接配置对话框:

ROST是一个很有价值的好帮手,使用它可以在测试评估你的应用程序服务器时节省大量时间. 这完全是RAD操作!

客户端均衡负载和容错处理

RemObjects SDK的设计目标是成为一个可升级系统.

默认的,RemObjects不指定固定连接,我们不用写代码就可以实现连接单个服务器或多个服务器.Cisco范例中, Windows 网路均衡负载, F5 Networks hardware,和其他硬件软件都与RO-based 系统无缝的集成在一起.

RemObjects 3.0 的传输通道已经升级支持客户端的均衡负载和容错.本质上你可以为你的通道的TROServerLocator属性明确的提供一系列的服务器列表. 你可以控制通道的均衡负载请求,或在当前服务器故障时选择另外一个.通道可以寻找服务并自动发现在线的服务器,但如果要尝试搜寻所有可能的目的源时很能会报异常.

下面的截图是在TROWinINetHTTPChannel中设置属性:

下面的截图展示了独立的TROServerLocator列表:

最后,这个截图显示测试应用程序的两个服务器通过连接和断开模拟断线条件输出的结果:

COM Active 脚本支持

虽然RemObjects服务器可以连接任何操作系统和客户端(Windows, Linux, Pocket PCs, .Net, Mono, 和其他用ANSI-C 编译的程序), 但在Windows系统下,COM几乎成了标准的用法. 一些应用程序像 Excel, Word, Lotus Notes可以通过OLE操纵, 有的高级用户可以用VBScript脚本控制它们. Web开发中,ASPWeb页面经常使用相似及的技术操作COM对象(VBScript JavaScript).

RemObjects 3.0使用COM DLL规则,这样可以使一种语言能使用不同的RemObjects服务器. RemObjects SDK 3.0生成的COM library发布的库如下:

ROServer.CreateService方法用服务方法名作参数返回一个对象可以将COM方法调用转换为RemObjects调用(二进制流或Soap).

通过使用ChannelType MessageType属性 (都是字符串), 你可以确定组件的类型,TROBINMessage TROWinINetHTTPChannel, 与服务器通信.

通过使用SetXXXProperty ReadXXXProperty方法你可以自定义属性,例如TargetURL 或自定义压缩.

下面的截图展示了Excel电子表格调用MegaDemo服务器的Sum方法:

与按钮相关的代码如下:

Private Sub CommandButton1_Click()

  Dim result

  Set ROServer = CreateObject("RemObjects.COMServer")

  ROServer.MessageType = "TROBINMessage"

  ROServer.ChannelType = "TROWinInetHTTPChannel"

  ROServer.SetChannelProperty "TargetURL", http://localhost:8099/BIN

  Set MegaDemoService = ROServer.CreateService("NewService")

  Dim A, B

  A = Sheets("Sheet1").Cells(9, 4).Value

  B = Sheets("Sheet1").Cells(10, 4).Value

  result = MegaDemoService.Sum(A, B)

  MsgBox "Sum " & A & "+" & B & "=" & result

  Set MegaDemoService = Nothing

  Set ROServer = Nothing

End Sub

下面的截图展示了ASP页面向用户显示简单信息:

代码如下:

<%

Dim result

Set ROServer = Server.CreateObject("RemObjects.COMServer")

ROServer.MessageType = "TROBINMessage"

ROServer.ChannelType = "TROWinInetHTTPChannel"

ROServer.SetChannelProperty "TargetURL", "http://localhost:8099/BIN"

Set MegaDemoService = ROServer.CreateService("NewService")

Response.Write "<STRONG>This is an ASP page that invokes methods "

Response.Write "of the RemObjects MegaDemo</STRONG><BR><BR>"

result = MegaDemoService.Sum(100, 200)

Response.Write "The result of 100+200 is " & result & "<BR>"

result = MegaDemoService.GetServerTime

Response.Write "The time on the server is " & result

Set MegaDemoService = nothing

Set ROServer = nothing

%>

广播服务事件 服务器端

广播服务事件是RemObjects3.0新特性,运行服务器异步执行客户端的回调函数. 回调函数是在客户端定义而由服务器相应一个事件时调用.

假设一个聊天程序,当一个用户类型信息被中心服务器接受后,再转发到其他所有的用户.为了发送消息,服务器端需要调用客户端事件句柄(OnSendMessage 方法). 只有当服务器能通过客户端的IP与其交互,或客户端在服务器回调中是启动的,才能完整这个功能.

RemObjects SDK 2.0中可以让应用程序的客户端和服务器端同时调用我们描述的回调函数,但是这只限于局域网(由于网路地址转换的问题);

下图是解释:

当客户端1发送一个消息,由于服务器知道客户端2的直接IP地址(192.168.0.101)可以将其发送到客户端2.而客户端34是不能到达的,因为使用了共享IP地址(24.100.3.36)与聊天程序服务器相连.事实上不同局域网要共享相同的IP地址增加了其他的复杂性. 网络中的设备像网关,防火墙给整个问题带来了更大的复杂性.

通常,写不可升级和多网络碎片的分布式系统回调可以避免. 要使你的系统支持升级并让客户端接受远程通知的唯一解决方法就是使用基于客户端轮询和服务器队列的通道.而这就是广播服务器事件提供的.

RemObjects 3服务器可以将客户端定时发送的消息存储在队列中,如下图:

当客户端接受一个消息,他们将调用特定的事件处理程序(Delphi的事件规则相同).

这个基于RemObjects3.0的聊天程序展示了如何生成用户连接一个或多个服务器上的程序. 这个例子可以让系统管理员远程断开客户端或适时的向客户端发送系统消息.

抱歉!评论已关闭.