天天看點

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 ,如需轉載請自行聯系原作者