找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 8|回复: 0

Laxcus分布式操作系统中的RFC

[复制链接]

12

主题

7

回帖

114

积分

管理员

积分
114
发表于 昨天 16:10 | 显示全部楼层 |阅读模式
RFC是"Remote Function Call"的缩写,它为分布式应用提供了一种高效、安全、可靠,灵活的远程函数调用机制。RFC简化了RPC的开发处理流程,支持异构设备之间,不同编程语言和函数的随机部署、动态扩展、动态交互,适合各种分布式、尤其是大规模、高通量、密集计算的应用场景。

RFC由客户端和服务端两个部分组成。
在服务端,开发者需要编写和编译一个SO库,并且在SO库中,定义一个名字是AgentCall的函数。AgentCall做为SO库中的所有函数的中转和代理,解析外部传入的各种信息,分发给目标函数,并由目标函数执行具体的工作,然后再由AgentCall转义和输出。
在客户端,开发者需要调用alib.h中的AFCall函数,以获取服务端AgentCall函数的输出结果。基于AFCall函数和它的输出结果,开发者可以解析AgentCall的输出信息,进一步派生各种客户端的处理工作。
见下面函数参数声明,AFCall函数的参数,除了asock之外,其他参数将通过网络,完整映射到AgentCall函数,被AgentCall处理。

AgentCall函数约定:
(1). AgentCall集成在目标so库文件中,由开发者实现。它一个代理函数,输入/输出参数通过它转义,调用目标函数。
(2). AgentCall函数格式约定:
int AgentCall(const char *name, const void *in, size_t inlen, void **out, size_t *outlen);
name - 目标函数名
in - 输入给目标函数的序列化参数字节流或者各种struct,in进入AFCall函数,通过网络传递到AgentCall,AgentCall解析再传递给目标函数
inlen -  序列化参数字节流长度
out - 目标函数返回的输出结果,并由AgentCall做了序列化处理
outlen - 输出结果的序列化字节流长度
(3). AgentCall返回值约定:
AgentCall的返回值固定为int类型,它是由开发者定义的一个返回结果,可以是任意值。按照传统c函数的约定,通常0是成功,负数是失败。
(4). 输出参数"out"约定:
out在AgentCall函数中的内存分配必须用malloc函数,对应的,外部会使用free函数释放

AFCall函数约定:
(1). AFCall在alib.h中定义,它是一个客户端函数,通过AFCall调用服务端的AgentCall,转义后调用目标函数。
(2). AFCall函数格式约定:
int AFCall(int asock, const char *name, const void *in, size_t inlen, void **out, size_t *outlen);
asock - 异步编号,由asock.h中的Attach函数生成,在LAXCUS集群所有节点中,具有唯一性。
name - 被服务端AgentCall调用的目标函数名
in - 输入参数集合后的序列化结果,可以是结构体,也可以是串行化的各种内容,输入参数的生成/解析由开发者定义,
inlen - 输入参数的字节长度
out - AgentCall函数的输出字节数组,输出参数的生成/解析由开发者定义
outlen - AgentCall函数的输出参数字节长度
(3). AFCall返回值约定:
int类型,来自服务端的AgentCall函数
(4). 输出参数"out"约定:
out内存必须用alib.h的AFree函数释放

基于AFC的AFCall/AgentCall函数分布调用机制,开发者可以定义和派生各种分布式作业。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|LAXCUS分布式操作系统交流区 ( 京ICP备17069115号-1 )

GMT+8, 2025-3-13 04:52 , Processed in 0.045752 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表