摘要:什么是是接口代码生成协议编写协议可以生成对应的服务端和客户端通用的代码调用接口生成对应的协议接口规范统一化接口统一化使用简单,真正意义上的函数式调用方式。
什么是IDL
1. IDL是kiss rpc接口代码生成协议, 编写IDL协议, 可以生成对应的服务端和客户端通用的RPC代码调用接口.生成对应的flatbuffer协议接口 2. 规范统一化, 接口统一化, 使用简单,真正意义上的函数式调用方式。IDL使用方式
1. [idl文件路径] [输出名字] [输出路径,默认为当前目录]. E."/root/home/kiss-rpc.idl" kiss-rpc "/root/home/rpc/" 2. 以模块名称输出, 模块路径为".": E."/root/home/kiss-rpc.idl" module.test.kiss-rpc "/root/home/rpc/" 3. 同时输出client和server文件代码,只需要拷贝到对应的客户端和服务端目录就行了. 4. message的类型名字必须首字母大写,类型成员必须标上序列号,否则无法编译通过 5. 函数参数列表只能为一个,否则无法编译通过。IDL支持的类型
IDL | D lang |
---|---|
bool | bool |
byte | byte |
ubyte | ubyte |
short | short |
ushort | ushort |
int | int |
uint | uint |
long | long |
ulong | ulong |
float | float |
double | double |
char | char |
string | string |
[] | DynamicArrayList |
@message | struct |
1. 服务端只要填充server目录下service文件的函数接口代码. 2. 客户端只需要调用client目录下service文件的接口的函数.kiss-rpc IDL 编写示例
//kiss rpc idl demo @message:UserInfo { string phone:3; string userName:1; int age:2; double wiget:4; string[] addressList:5; } @message:contacts { int number:1; UserInfo[] userInfoList:2; } @service:AddressBook //接口类 { contacts getContactList(string accountName); }客户端远程调用(示例目录:IDL-Example/client/source/app.d)
倒入头文件
import KissRpc.IDL.kissidlService; import KissRpc.IDL.kissidlMessage; import KissRpc.Unit;
客户端同步调用
try{ auto c = addressBookService.getContactList(name); foreach(v; c.userInfoList) { writefln("sync number:%s, name:%s, phone:%s, age:%s", c.number, v.name, v.widget, v.age); } }catch(Exception e) { writeln(e.msg); }
客户端异步调用
try{ addressBookService.getContactList(name, delegate(Contacts c){ foreach(v; c.userInfoList) { writefln("async number:%s, name:%s, phone:%s, age:%s", c.number, v.name, v.widget, v.age); } } ); }catch(Exception e) { writeln(e.msg); }
绑定socket方式压缩
RpcClient.setSocketCompress(RPC_PACKAGE_COMPRESS_TYPE.RPCT_DYNAMIC); //动态压缩方式,默认超过200个字节压缩. RpcClient.setSocketCompress(RPC_PACKAGE_COMPRESS_TYPE.RPCT_COMPRESS); //强制压缩方式
单个请求方式压缩,同步调用,强制压缩
//use compress demo try{ auto c = addressBookService.getContactList(name, RPC_PACKAGE_COMPRESS_TYPE.RPCT_COMPRESS); foreach(v; c.userInfoList) { writefln("compress test: sync number:%s, name:%s, phone:%s, age:%s", c.number, v.name, v.widget, v.age); } }catch(Exception e) { writeln(e.msg); }
单个请求方式压缩,异步调用,设置100个字节的动态压缩方式,请求超时30秒
//use dynamic compress and set request timeout try{ RPC_PACKAGE_COMPRESS_DYNAMIC_VALUE = 100; //reset compress dynamaic value 100 byte, default:200 byte addressBookService.getContactList(name, delegate(Contacts c){ foreach(v; c.userInfoList) { writefln("dynamic compress test: sync number:%s, name:%s, phone:%s, age:%s", c.number, v.name, v.widget, v.age); } }, RPC_PACKAGE_COMPRESS_TYPE.RPCT_DYNAMIC, 30 ); }catch(Exception e) { writeln(e.msg); }服务端service文件代码(示例目录:IDL-Example/server/source/IDL/kissidlInterface.d):
RpcAddressBookService.getContactList
Contacts getContactList(AccountName accountName){ Contacts contactsRet; //input service code for Contacts class contactsRet.number = accountName.count; for(int i = 0; i < 10; i++) { UserInfo userInfo; userInfo.age = 18+i; userInfo.name = accountName.name ~ to!string(i); userInfo.widget = 120+i; contactsRet.userInfoList ~= userInfo; } return contactsRet; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/10154.html
摘要:支持和手动编写协议两种方式。支持压缩算法,压缩速度,性能优越。单请求压缩对于单个请求进行压缩,也会根据请求的数据包压缩方式进行压缩。待开发数据加密使用多证书加密和单证书加密,更加安全。负载均衡,反向代理主动发现服务器,动态感知集群状态。 kiss-rpc特性: 1. 轻量级,简单易用。支持idl和手动编写协议两种方式。模拟函数式调用方式,更加符合rpc远程调用方式。 易修改易使用,已...
摘要:最近呢,在做的设计对于设计,一方面是对于后端框架的设计,另一方面呢,是对于整个体系的设计在这里呢,我们来理理思路,先来大致分一下块风格就不用说了,我们就用风格,接下来,也就是我们所说的接口描述语言框架,整个服务的核心驱动版本控制还有一些辅助 最近呢,在做 api 的设计 对于设计,一方面是对于后端 server 框架的设计,另一方面呢,是对于整个 api 体系的设计 在这里呢,我们来理...
摘要:服务器端使用它来做顶层接口,编写实现类。会自动生成同步调用和异步调用的两个接口。方法参数的封装类,以方法名命名方法返回值的封装类,以方法名命名参考个人博客 基本概念 轻量级、跨语言的RPC框架 功能特点: 基于IDL(接口描述语言)生成跨语言的RPC clients and servers,支持超过20种语言 支持二进制的高性能的编解码框架 支持NIO的底层通信 相对简单的服务调用模...
摘要:软件开发体系架构两层架构传统的客户服务器系统仅只简单地基于两层体系来构建,即客户端前台和企业信息系统后台,没有任何中间件,业务逻辑层与表示层或数据层混在一起。 showImg(https://segmentfault.com/img/remote/1460000007090113); 理想的建筑师应该既是文学家又是数字家,他还应通晓历史,热衷于哲学研究,精通音乐,懂得医药知识,具有法学...
阅读 2929·2021-11-17 09:33
阅读 1897·2021-09-28 09:35
阅读 500·2019-08-30 15:54
阅读 279·2019-08-30 12:51
阅读 1909·2019-08-29 16:28
阅读 2715·2019-08-29 16:10
阅读 2223·2019-08-29 14:21
阅读 301·2019-08-29 14:09