转:RealThinClient (RTC)是什么?

时间:2023-03-08 17:04:03
转:RealThinClient (RTC)是什么?

RealThinClient SDK是用于开发标准的HTTP(S)服务器,ISAPI扩展以及客户端的VCL控件。可用于Windows下的CodeGear Delphi 6-XE5。

功能描述 About Feature

RealThinClient SDK是用于开发标准的HTTP(S)服务器,ISAPI扩展以及客户端的VCL控件。可用于Windows下的CodeGear Delphi 6-xe5。

  • 编写可通过防火墙的客户端、服务器和ISAPI扩展(兼容Apache 2.x and MS IIS 5.x)
  • 作为独立的服务器或ISAPI扩展
  • 使用RTC Web服务器(包含Delphi源码)进行ISAPI扩展的调试
  • 只需通过设置属性(内置的线程池)就可以使你的客户端、服务器采用多线程处理
  • 能够自动压缩和强加密:
    - 通过设置属性激活内置的压缩功能
    - 通过设置属性激活内置的加密功能
  • 使用RTC脚本引擎搭建Delphi代码和你的可视化HTML之间的桥梁
  • 基于组件的模块化设计允许您将远程客户端/服务器的新功能集成到您现有的Delphi应用程序和重新使用现有的代码
  • 通过使用RTC格式或标准的XML-RPC格式(通过设置属性选择自己的格式)编写和调用远程函数
  • 使用远程函数向导轻松的编写调用服务器端函数的客户端类
  • Delphi组件提供完整的源代码:
    - Borland/CodeGear Delphi 6 - XE5 for Windows
    - CodeGear Delphi / RAD Studio XE5 for Windows
    - Lazarus for Windows
    - Lazarus for Linux and MacOSX (beta)
RealThinClient SDK : 特征的简短说明
多部署:
ISAPI 扩展,
独立的服务器,
第三方的服务器
你可以创建: 
独立的、对客户端无个数限制的服务器 
作为ISAPI扩展DLL (MS IIS或Apache)
将你的应用程序整合到第三方的基于消息的服务器,比如NexusDB服务器
RAD:
编写事件, 
无用户界面
使用RTC开发的一切都是基于组件的,因此你需要编写的所有代码都以事件的形式定义的,也就是说你只需要在相应的事件下编写代码即可,因此你可以不需要向导或编写用户界面就可以设计自己的服务器和客户端应用程序
轻松的多线程:
简单的打开/关闭切换
所有的RTC连接组件都嵌入了一种非常成熟的多线程机制。你只需要简单的设置MultiThreaded属性为True就可以让成千上万的活动连接同时运行在独立的线程中,这时任何新接收到的连接都会由一个线程池进行处理。这种机制可以节约宝贵的系统资源。
HTTP 协议:
无需担心防火墙
RTC客户端可以不用进行任何配置就可以通过防火墙到达网络。 
通过设置UseProxy属性为True,数据客户端就可以使用一个同样设置的连接供应站与网络进行数据传输,就像IE浏览Web一样。这就意味着客户可以在任何局域网内都可以访问网络。
非阻塞 不同于其他大部分的网络组件,RTC连接组件是非阻塞型和事件驱动型的。这就意味着即使不使用多线程模式,客户端与服务器端通信时都不会被阻塞(出现”应用程序没有响应”的情况).在整个连接中,每一个状态的改变都会触发一个相应的事件。
远程函数:
可重用, 
简单编写,
简单调用
就像使用本地函数一样执行和使用远程函数。 
你只需要放置一个RtcFunction组件在你的Form或DataModule中,然后设置函数名称和在OnExecute事件中编写自己的代码即可。 
OnExecute事件将接收连接对象、函数参数和一个结果对象,你只需要使将参数传递到事先写好的函数中,剩下的就留给控件处理。

强大的加密功能
& 自动压缩功能

RTC组件提供内置的、易使用的、可变长度的密钥的加密和数据压缩功能。 
你无需考虑密钥或数据压缩,所有的这一切都由控件为你提供。 
你只需在RtcClientModule和RtcServerModule中简单的设置Encryption 和 Compression属性,剩下的就留给控件处理。
插件框架:
编写自己的插件或
使用第三方插件
所有使用RTC SDK编写的客户端、服务器端的代码都将以功能模块和插件的形式与同样使用RTC SDK编写的应用程序整合。比如,你可以整合Web服务器、消息服务器、应用服务器、数据库服务器、自己编写的功能函数到一个数据服务器中,即使这些组件并没有被特意设计成共享同一个服务空间。
基于简单易用的插件框架,你可以将任意多个的功能性组件和数据性组件整合到一起。比如将RtcDataProvider, RtcServerModule 和RtcDataServerLink整合到一个数据服务连接组件中,使服务器的功能得以扩展。同时由于保持代码在不同的单元(Data Modules),你甚至可以向其他同样使用RTC SDK开发的人提供自己的插件(当然也可以出售插件).
小体积 当使用D7压缩后,一个完整的使用RTC SDK开发的Web服务器占用的空间不到600KB。虽然它如此小,但它的功能丰富,稳定性高,可扩展性好。
创建稳定强大的网络应用程序
所有的RTC组件都经过压力测试。

采用无阻塞、事件驱动与内置的线程池通信机制,RealThinClient SDK可以在一个真实的多线程环境下以少数的线程处理数千计的活动连接(比如,100个线程就足以处理几千个活动连接)。
由于减少所有的重要资源(CPU、内存、线程、计时器、处理器等)的使用,自动处理所有与通信有关的对象,灵活的远程函数(接收任何结构的参数和返回任何其他结构的结果),自动的会话处理(在会话时间内的超时处理)等等这些使得使用RealThinClient组件编写的服务器和客户端更加稳定。

RealThinClient SDK 包里包含什么?
RealThinClient SDK :服务器端组件
RtcHttpServer: 实现TCP/IP上的HTTP协议,用于将RTC组件编译到独立的服务器应用程序中(继承TRtcDataServer). 所有高层的服务器端的RTC组件都使用TRtcDataServer 子类与HTTP客户端(RTC客户端、Web浏览器、SOAP客户端等)通信.最好的方法是将你使用高层RTC组件编写的代码分开到不同的数据模块中,然后使用单独的一个DataModule将RtcHttpSever编译到一个独立的应用程序(EXE)中。
RtcISAPIServer: 实现ISAPI接口,扩展ISAPI兼容的Web服务器(继承TRtcDataServer)。
所有高层的服务器端的RTC组件都使用TRtcDataServer 子类与HTTP客户端(RTC客户端、Web浏览器、SOAP客户端等)通信。最好的方法是将你使用高层RTC组件编写的代码分开到不同的数据模块中,然后使用单独的一个DataModule将RtcISAPISever编译到ISAPI扩展(DLL)中。
RtcMessageServer: 实现可扩展的基于消息的服务器端的组件,可用于通过第三方的消息层访问RTC应用程序。RTC SDK包含一个随时可使用的NexusDB插件,该插件使用RtcMessageServer组件将RTC应用程序整合到NexusDB服务器。
RtcDataServerLink: 在你有一些数据提供组件或服务模块组件交叉的单元时是非常有用的,因为它可以群集相关的数据提供组件以及将它们链接到它们的数据服务器。如果你只有一个或少数几个数据提供组件,你可以直接将链接它们到数据服务器连接组件,而无需RtcDataServerLink。
RtcDualDataServerLink: 连接一组RTC组件到2个或更多的服务器连接组件(RtcHttpServer 和 RtcMessageServer)。这可以让你只需编写你的应用程序一次,然后可以通过标准的HTTP协议或通过安全的HTTPS协议(如果需要也可以通过不同的基于消息的传输比如NexusDB传输层)获取。
RtcDataProvider: 用于实现处理HTTP请求和响应的事件。每一个Data Provider只响应对应自己的请求而不会处理其他的请求。Data Providers以插件的形式在服务器上工作,这使得Data Providers可以单独或则与其他RTC组件结合来开发多功能的服务器。
下面是一些可能用到的Data Providers列表:
  • File provider 用于传送文件
  • PHP provider 用于处理php脚本和发送html页面
  • SOAP provider 用于实现不同的Web服务器
  • Page providers 用于生成动态的 HTML 页面
  • Image providers 用于为Web动态生成图片
RtcServerModule: 执行一组远程函数。它可以让服务器为自己的远程函数提供远程访问的能力。RtcServerModule没有事件可执行,你只需要在一边将RtcServerModule和它的服务器连接起来,同时配合另一边的RtcFunctionGroup就可以激活远程函数。
RtcFunctionGroup: 提供访问函数的功能。当配合RtcServerModule使用时,它会自动为所有的RTC客户端激活远程访问的功能。当配合RtcClientModule使用时,服务器可以以客户端函数调用的返回结果的形式调用客户端的函数。为了实现远程函数,你至少需要一个RtcFunctionGroup组件以及连接一个或多个RtcFunction组件,Function Groups也可以让你调用同一组的其他函数。 RtcFunctionGroup首先是由RtcServerModule 和 RtcClientModule为了实现远程函数而使用的,但是其他的组件也可以直接使用它。
RtcFunction: 为你的RTC服务器添加新的远程函数的步骤是:
  • 将一个RtcFunction连接到一个RtcFunctionGroup,
  • 务必让Function Group指派一个RtcServerModule,
  • 选择一个"FunctionName",然后在OnExecute事件中编写自己的代码。

当编写远程函数时,你除了自己的代码外无需再考虑其他的事情。一旦出现异常(你可以在OnExecute事件里抛出异常),客户端会得到异常信息(Result.isType=rtc_Exception),所以你不需要担心。

RtcScriptEngine: 可以在HTML和XML文件里使用像Pascal一样的脚本语言。
当使用RTC脚本引擎时,你就可以决定你的Delphi函数、编译服务器或ISAPI扩展应该有多少应用程序代码以及在你的HTML/XML文件中应该有多少脚本。这使得你可以将PHP和JSP这样的语言和Delphi整合。
RealThinClient SDK : 客户端组件
RtcHttpClient: 它负责使用HTTP/HTTPS协议和你的服务器直接通信。
它发送由高层客户端RTC组件比如RtcDataRequest 和 RtcClientModule发起的请求,然后接收响应并同样使用高层组件处理这些响应。
RtcMessageClient:它是一个可以将你的高层客户端组件(比如DataRequest 和 ClientModule)整合到第三方传输层的组件。比如,你可以在你的NexusDB服务器中使用NexusDB插件调用RTC远程函数
RtcDataClientLink: 在你有大量的Data Request或Client Module交叉单元时它是非常有用的。因为它可以群集相关的客户端请求组件以及与它们的数据客户端连接相整合。如果你只有一两个数据请求组件,你可以直接与数据客户端连接组件整合,而不需要RtcDataClientLink。
RtcDualDataClientLink: 用于创建小型的客户端连接池,当提交一个请求时,组件可以根据当前可用连接中挂起的请求的数量决定使用哪个连接。一个新的请求将由挂起/活动请求最少的连接提交,除非你明确的指出了不同的连接对象。
RtcDataRequest: 与RtcDataProvider相对应的客户端组件。它可以让客户端向RTC服务器或其他的HTTP服务器提交请求。使用该组件,你可以向一个Web服务器请求一个文件,提交一个SOAP请求,执行一个服务器端的PHP脚本等等。你可以使用该组件请求HTTP服务器提供的所有服务。
RtcClientModule: 与RtcServerModule相对应的客户端组件。它可以让客户端调用由服务器的一个服务模块提供的函数。RtcClientModule没有事件可以实现,你只需要整合一个客户端连接组件(RtcHttpClient)就可以调用远程函数。如果你定义了客户端函数然后整合到RtcClientModule中,那就可以执行这些客户端远程函数。没有特别需要实现的部分。服务器是以客户端对服务器端调用的返回结果的形式调用客户端远程函数的。
RtcResult: 处理远程函数调用返回的结果。使用OnResult事件(OnResult事件接收连接(Sender:TRtcConnection),传递的参数(Param:TRtcValue)以及接收到的结果(Result:TRtcValue)),你可以轻松的编写处理返回结果的代码。
  • 也许只是在函数是否执行成功的检查,
  • 或则弹出一个对话框,
  • 或则创建一个包含所有接收到的数据的窗体,
  • 或则装填在同一窗体或datamodule的其他组件(比如,从数据库中填充数据到ClientDataSet)。