高效简单的远程调用接口-starcore

本文介绍了一种基于StarCore的高效远程调用方法,该方法简化了传统远程调用中复杂的IDL编写过程,允许使用多种语言如C/C++、Lua、Python进行服务器端和客户端的开发。文中通过具体的代码示例展示了如何快速搭建远程调用的服务,并指出其在数据传输方面的高性能表现。

传统的远程调用,需要编写IDL,生成客户端和服务器端的桩函数,使用起来不是很容易。效率没有体验过,不知道

是否高效。

  采用starcore提供的远程调用接口,可以非常简单的实现远程调用,而且服务器,客户端分别可以采用c/c++,lua,python

语言。效率很高,支持大数据量的传输。

 

服务器端创建一个类,并定义函数,采用c代码如下:

AtomicClass = SRPInterface ->CreateAtomicObjectSimple("BasicItem","TestClass",NULL,&ErrorInfo);

 RemoteRead_AtomicFunction = SRPInterface ->CreateAtomicFunctionSimple(AtomicClass,"RemoteRead","VS_PARAPKGPTR RemoteRead(VS_ULONG Handle);",&ErrorInfo);

 

VS_PARAPKGPTR RemoteRead(VS_ULONG Handle)为可远程调用的函数,返回一个参数包给客户端。

参数包可以携带二进制数据。

 

客户端采用lua调用,代码如下:

 

RetCode,RetValue = Service.FileObject:_SRemoteCall(0,0,"RemoteRead",Handle)

 

RetValue为服务器端返回的参数包。

 

实现非常简单,不需要编写任何的IDL。数据传输效率也很高

 

完整的例子可参见:http://www.srplab.com/data/hadoop_simple_cloudservice.rar

 

版本: 5.0.0.0 (build 2014.07.07) 1. 概述 RCK(remote call kernel 缩写)为远程调用内核, 其通讯协议为自定义数据流协议。 RCK 负责远程调用过程中的数据组织, 并不关心实际物理通讯协议, 实则属于逻辑层通讯 协议。 RCK 通讯槽接口(RCKSlot)负责数据接收和发送, 属于通讯的适配层, 由第三方来实现 实际的数据传输接口。 RCK 包含 Application, Function, Connection, Command, Response 和 Fields 六 大类, 其主要功能如下: a. Application 类主要负责 Function 的组织和 Response 的分发执行; b. Function 类主要负责 Function 的定义及按各模式调用; c. Connection 类主要负责登录对端应用, Command 请求执行, Response 应答管理, 以及发送和接收数据等等; d. Command 类主要负责函数参数传入, 以及返回值和返回字段值读取; e. Response 类主要负责对端指定 Function 请求的执行处理, 如参数读取、返回 值编辑及提交; f. Fields 类主要负责数据库字段值及定义集的组包和拆包。 2. RCK 通讯槽接口定义 参见 <RCKSlot.h> 文件 3. RCK 接口定义 参见 <RCKernel.h> 文件 4. RC 的自环接口定义(注: 内部实现 RCK 通讯槽接口) 自环接口用于进程内通过 Command 调用 Application 函数, 便于输出接口统一。 参见 <RC4SL.h> 文件 5. RC 的 TCP 接口定义(注: 内部实现 RCK 通讯槽接口) 参见 <RC4TCP.h> 文件 6. RC 的共享内存通讯接口定义(注: 内部实现 RCK 通讯槽接口) 参见 <RC4SHM.h> 文件 RC 压缩包中含有如下文件: -------------------------------------------------------------------------------- \RC 5.0\_exports\Delphi\RC4SHM.pas \RC 5.0\_exports\Delphi\RC4SL.pas \RC 5.0\_exports\Delphi\RC4TCP.pas \RC 5.0\_exports\Delphi\RCKernel.pas \RC 5.0\_exports\Delphi\RCKSlot.pas \RC 5.0\_exports\VC++\RC4SHM.h \RC 5.0\_exports\VC++\RC4SHM32.lib \RC 5.0\_exports\VC++\RC4SHM64.lib \RC 5.0\_exports\VC++\RC4SL.h \RC 5.0\_exports\VC++\RC4SL32.lib \RC 5.0\_exports\VC++\RC4SL64.lib \RC 5.0\_exports\VC++\RC4TCP.h \RC 5.0\_exports\VC++\RC4TCP32.lib \RC 5.0\_exports\VC++\RC4TCP64.lib \RC 5.0\_exports\VC++\RCKernel.h \RC 5.0\_exports\VC++\RCKernel.lib \RC 5.0\_exports\VC++\RCKernel64.lib \RC 5.0\_exports\VC++\RCKSlot.h \RC 5.0\_rc32\RC4SHM32.dll \RC 5.0\_rc32\RC4SL32.dll \RC 5.0\_rc32\RC4TCP32.dll \RC 5.0\_rc32\RCKernel.dll \RC 5.0\_rc64\RC4SHM64.dll \RC 5.0\_rc64\RC4SL64.dll \RC 5.0\_rc64\RC4TCP64.dll \RC 5.0\_rc64\RCKernel.dll \RC 5.0\classes\RCK\Delphi\RCKernel.pas \RC 5.0\classes\RCK\Delphi\RCKObjs.pas \RC 5.0\classes\RCK\Delphi\RCKSlot.pas \RC 5.0\classes\RCK\VC++\RCKernel.h \RC 5.0\classes\RCK\VC++\RCKernel.lib \RC 5.0\classes\RCK\VC++\RCKernel64.lib \RC 5.0\classes\RCK\VC++\RCKObjs.cpp \RC 5.0\classes\RCK\VC++\RCKObjs.h \RC 5.0\classes\RCK\VC++\RCKSlot.h \RC 5.0\classes\SHM\Delphi\RC4MSrvObj.pas \RC 5.0\classes\SHM\Delphi\RC4SHM.pas \RC 5.0\classes\SHM\VC++\RC4MSrvObj .cpp \RC 5.0\classes\SHM\VC++\RC4MSrvObj .h \RC 5.0\classes\SHM\VC++\RC4SHM.h \RC 5.0\classes\SHM\VC++\RC4SHM32.lib \RC 5.0\classes\SHM\VC++\RC4SHM64.lib \RC 5.0\classes\TCP\Delphi\RC4TCP.pas \RC 5.0\classes\TCP\Delphi\RC4TSrvObj.pas \RC 5.0\classes\TCP\VC++\RC4TCP.h \RC 5.0\classes\TCP\VC++\RC4TCP32.lib \RC 5.0\classes\TCP\VC++\RC4TCP64.lib \RC 5.0\classes\TCP\VC++\RC4TSrvObj.cpp \RC 5.0\classes\TCP\VC++\RC4TSrvObj.h \RC 5.0\demo\__lib32\include\ (KYLib for VC6) \RC 5.0\demo\__lib32\KYLib.lib \RC 5.0\demo\__lib32\KYLib_d.lib \RC 5.0\demo\__lib32\RC4SHM32.lib \RC 5.0\demo\__lib32\RC4SL32.lib \RC 5.0\demo\__lib32\RC4TCP32.lib \RC 5.0\demo\__lib32\RCKernel.lib \RC 5.0\demo\__lib64\include\ (KYLib for VS2008) \RC 5.0\demo\__lib64\KYLib.lib \RC 5.0\demo\__lib64\KYLib_d.lib \RC 5.0\demo\__lib64\RC4SHM64.lib \RC 5.0\demo\__lib64\RC4SL64.lib \RC 5.0\demo\__lib64\RC4TCP64.lib \RC 5.0\demo\__lib64\RCKernel.lib \RC 5.0\demo\AppDemo\release\AppDemo.dll \RC 5.0\demo\AppDemo\release\AppDemo.lib \RC 5.0\demo\AppDemo\units\ADExports.cpp \RC 5.0\demo\AppDemo\units\ADExports.h \RC 5.0\demo\AppDemo\units\DemoApp.cpp \RC 5.0\demo\AppDemo\units\DemoApp.h \RC 5.0\demo\AppDemo\units\RCKernel.h \RC 5.0\demo\AppDemo\units\RCKObjs.cpp \RC 5.0\demo\AppDemo\units\RCKObjs.h \RC 5.0\demo\AppDemo\units\RCKSlot.h \RC 5.0\demo\AppDemo\AppDemo.cpp \RC 5.0\demo\AppDemo\AppDemo.def \RC 5.0\demo\AppDemo\AppDemo.dsp \RC 5.0\demo\AppDemo\AppDemo.dsw \RC 5.0\demo\AppDemo\AppDemo.rc \RC 5.0\demo\AppDemo\resource.h \RC 5.0\demo\TestRC\release\TestRC4SHM.exe \RC 5.0\demo\TestRC\release\TestRC4SL.exe \RC 5.0\demo\TestRC\release\TestRC4TCP.exe \RC 5.0\demo\TestRC\release64\TestRC4SHM.exe \RC 5.0\demo\TestRC\release64\TestRC4SL.exe \RC 5.0\demo\TestRC\release64\TestRC4TCP.exe \RC 5.0\demo\TestRC\units\DemoApp.cpp \RC 5.0\demo\TestRC\units\DemoApp.h \RC 5.0\demo\TestRC\units\RC4SHM.h \RC 5.0\demo\TestRC\units\RC4SL.h \RC 5.0\demo\TestRC\units\RC4TCP.h \RC 5.0\demo\TestRC\units\RCKernel.h \RC 5.0\demo\TestRC\units\RCKObjs.cpp \RC 5.0\demo\TestRC\units\RCKObjs.h \RC 5.0\demo\TestRC\units\RCKSlot.h \RC 5.0\demo\TestRC\units\TestRC4SHM.cpp \RC 5.0\demo\TestRC\units\TestRC4SL.cpp \RC 5.0\demo\TestRC\units\TestRC4TCP.cpp \RC 5.0\demo\TestRC\resource.h \RC 5.0\demo\TestRC\TestRC.dsw \RC 5.0\demo\TestRC\TestRC.sln \RC 5.0\demo\TestRC\TestRC4SHM.dsp \RC 5.0\demo\TestRC\TestRC4SHM.rc \RC 5.0\demo\TestRC\TestRC4SHM.vcproj \RC 5.0\demo\TestRC\TestRC4SL.dsp \RC 5.0\demo\TestRC\TestRC4SL.rc \RC 5.0\demo\TestRC\TestRC4SL.vcproj \RC 5.0\demo\TestRC\TestRC4TCP.dsp \RC 5.0\demo\TestRC\TestRC4TCP.rc \RC 5.0\demo\TestRC\TestRC4TCP.vcproj \RC 5.0\test\rc-tool\AppDemo.dll \RC 5.0\test\rc-tool\RC4SHM32.dll \RC 5.0\test\rc-tool\RC4SL32.dll \RC 5.0\test\rc-tool\RC4TCP32.dll \RC 5.0\test\rc-tool\RCKernel.dll \RC 5.0\test\rc-tool\RCTool.exe \RC 5.0\test\rc-tool\RCTool.ini \RC 5.0\test\rc-tool\RCTool.rtc \RC 5.0\test\rc-tool\RCTool.rte \RC 5.0\test\rc-tool\RCTool.rts \RC 5.0\test\test-rc4shm\RC4SHM32.dll \RC 5.0\test\test-rc4shm\RCKernel.dll \RC 5.0\test\test-rc4shm\TestRC4SHM.dat \RC 5.0\test\test-rc4shm\TestRC4SHM.exe \RC 5.0\test\test-rc4shm\TestRC4SHM.ini \RC 5.0\test\test-rc4shm\TestRC4SHM.txt \RC 5.0\test\test-rc4sl\RC4SL32.dll \RC 5.0\test\test-rc4sl\RCKernel.dll \RC 5.0\test\test-rc4sl\TestRC4SL.exe \RC 5.0\test\test-rc4sl\TestRC4SL.ini \RC 5.0\test\test-rc4sl\TestRC4SL.txt \RC 5.0\test\test-rc4tcp\RC4TCP32.dll \RC 5.0\test\test-rc4tcp\RCKernel.dll \RC 5.0\test\test-rc4tcp\TestRC4TCP.dat \RC 5.0\test\test-rc4tcp\TestRC4TCP.exe \RC 5.0\test\test-rc4tcp\TestRC4TCP.ini \RC 5.0\test\test-rc4tcp\TestRC4TCP.txt --------------------------------------------------------------------------------
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值