RPC编程实战之二

简介:

我们知道用rpcgen命令能生成服务器和客户端代码以及Makefile,开发人员可以在生成的demo code上进行二次开发,然后把代码集中到系统中去。基于Linux的开系统中,类似git的颁布管理工具和类似makefile的代码编译生成工具常常用到,那么在实际的项目实践中,rpc生成的哪些代码又该怎样用makefile和git管理维护呢?下面结合本人最近的工作实践和大家一起探讨,欢迎各位批评指正。


1、makefile里如何使用RPC及其生成代码

根据rpcgen生成代码的命名规则,可以在Makefile里定义rpcgen工具生成的client端和server端的程序,比如下面的代码:


SOURCES.x = my_rpc.x #定义了rpcgen所依赖的.x文件

# Three files below was generated by rpcgen

my_RPC_CLNT=my_rpc_clnt.c#定义了客户端的程序

my_RPC_SVC=my_rpc_svc.c    #定义了服务器端的程序

my_RPC_HEAD=my_rpc.h       #定义了头文件的名字


# abstract common functions from un-generated my_rpc_client.c and

# my_rpc_server.c for usage of upper layer software

mylib_rpc_lib=mylib_rpc_lib.c#在rpcgen生成的代码上修改的需要保留的代码


my_RPC_SRC=$(my_RPC_CLNT) $(my_RPC_SVC) $(mylib_rpc_lib) #表示所有的.c文件

my_RPC_OBJS=$(patsubst %.c,%.o,$(notdir ${my_RPC_SRC}))  #表示my_RPC_OBJS=mylib_rpc_lib.o


……………..


$(my_RPC_OBJS):%.o:%.c#表示 mylib_rpc_lib.o: my_rpc_lib.c

gcc -c -o $@ $^ $(CFLAGS) $(INCLUDE)


#生成client端程序的命令:

$(my_RPC_CLNT): $(SOURCES.x)

[[ ! -f $@ ]] && rpcgen -C -l $^ -o $@


#生成客户端端程序的命令:

$(my_RPC_SVC): $(SOURCES.x)

[[ ! -f $@ ]] && rpcgen -C -m $^ -o $@


#指定makefile命令默认的target中包括gencode

.PHONY: all

all: gencode $(TARGET) install


#指定如何生成my_RPC所依赖的头文件

.PHONY: gencode

gencode:

-[[ ! -f $(my_RPC_HEAD) ]] && rpcgen -C -h $(SOURCES.x) -o $(my_RPC_HEAD)

#指定当运行make clean时,清除*.o和rpcgen生成的客户端和服务器端的代码。

clean:

rm -rf *.o *.a  $(my_RPC_CLNT) $(my_RPC_SVC) $(my_RPC_HEAD)



2、RPC相关程序的调试


    利用上面Makefile最后生成可执行文件,并不表示大功告成。实际运行时候,还可能碰到多种问题,碰到这些问题后,可以先尝试客户端和服务器端程序在同一个节点机器上运行时,是否出现问题:如果也出现问题,需要检查源程序包括.c代码和.x程序;如果在同一个节点上运行没有出现问题,而在多个节点上运行时出现问题,比如下面的几种:

1. connection refused;

2. unable to route to XXX (IP);

3. Connection timeout;

那么需要检查系统的111端口、RPC服务以及防火墙设置,在CentOS上,可以尝试下面的脚本,来禁用firewall、启动111端口和RPC服务:

systemctl start firewalld.service

systemctl start rpcbind.service

firewall-cmd --add-service=rpc-bind --permanent

firewall-cmd --add-port=111/tcp --permanent

firewall-cmd --add-port=111/udp --permanent

systemctl stop firewalld.service
















本文转自存储之厨51CTO博客,原文链接:http://blog.51cto.com/xiamachao/1768040 ,如需转载请自行联系原作者


相关文章
|
缓存 Java 中间件
jvm性能调优实战 -55RPC调用引发的OOM故障
jvm性能调优实战 -55RPC调用引发的OOM故障
227 0
|
JSON 负载均衡 网络协议
Rpc编程系列文章第二篇:RPC框架设计目标
Rpc编程系列文章第二篇:RPC框架设计目标
|
Dubbo Java 应用服务中间件
由浅入深RPC通信原理实战1
由浅入深RPC通信原理实战1
196 0
|
6月前
|
分布式计算 Go C++
初探Go语言RPC编程手法
总的来说,Go语言的RPC编程是一种强大的工具,让分布式计算变得简单如同本地计算。如果你还没有试过,不妨挑战一下这个新的编程领域,你可能会发现新的世界。
154 10
|
Dubbo Java 应用服务中间件
Rpc编程系列文章第三篇:Hessian RPC一个老的RPC框架
Rpc编程系列文章第三篇:Hessian RPC一个老的RPC框架
|
存储 缓存 Linux
【实战指南】嵌入式RPC框架设计实践:六大核心类构建高效RPC框架
在先前的文章基础上,本文讨论如何通过分层封装提升一个针对嵌入式Linux的RPC框架的易用性。设计包括自动服务注册、高性能通信、泛型序列化和简洁API。框架分为6个关键类:BindingHub、SharedRingBuffer、Parcel、Binder、IBinder和BindInterface。BindingHub负责服务注册,SharedRingBuffer实现高效数据传输,Parcel处理序列化,而Binder和IBinder分别用于服务端和客户端交互。BindInterface提供简单的初始化接口,简化应用集成。测试案例展示了客户端和服务端的交互,验证了RPC功能的有效性。
709 82
|
消息中间件 Linux Android开发
实战高效RPC方案在嵌入式环境中的应用与揭秘
该文介绍了在嵌入式环境中应用和设计高效RPC方案的过程。作者参考了Android的Binder机制,采用共享环形缓冲区来解决进程间同步返回值的问题。选择共享内存是因为其零拷贝、低延迟和灵活访问模式的优势,而环形缓冲区则提供了FIFO特性,便于数据有序传输并优化内存管理。文中提到了关键接口`write`和`read`的实现,以及一个简单的`CalculateSum`接口调用示例,展示了RPC方案的实际效果。该方案旨在提供一种轻量级、高性能的嵌入式RPC通信方法。
316 3
|
Java fastjson 数据安全/隐私保护
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
316 0
|
Go
Go语言RPC实战:打造自己的远程调用服务
Go语言RPC实战:打造自己的远程调用服务
311 0
|
存储 网络协议 Dubbo
Rpc编程系列文章第一篇:RPC概述和架构演变
Rpc编程系列文章第一篇:RPC概述和架构演变