rpc进程Linux,linux RPC 测试(转载)
转自:
http://www.justwinit.cn/post/3960/
RPC是glibc提供的函数参数/返回值封装服务, 并将封装结果通过网络传到服务器.
RPC服务端首先要启动portmapper服务.
测试一个简单的RPC传输示例, 先定义一个模板文件test.x
program TESTPROG{
version VERSION{
int int_echo(int)=1;
int get_str_len(string)=2;
int add ( int, int ) = 3;
}=1;
}=30000;内含3个函数, 注意其中一个有2个参数.
然后可以用rpcgen生成一个Makefile:
rpcgen -a -N test.x
这会生成Makefile, 客户端和服务端的程序, 和函数示例.
我们手工修改一下Makefile
# This is a template Makefile generated by rpcgen
# Parameters
CLIENT = test_client
SERVER = test_server
SOURCES_CLNT.c =
SOURCES_CLNT.h =
SOURCES_SVC.c =
SOURCES_SVC.h =
SOURCES.x = test.x
TARGETS_SVC.c = test_svc.c test_server.c test_xdr.c
TARGETS_CLNT.c = test_clnt.c test_client.c test_xdr.c
TARGETS = test.h test_xdr.c test_clnt.c test_svc.c
OBJECTS_CLNT = $(SOURCES_CLNT.c:%.c=%.o) $(TARGETS_CLNT.c:%.c=%.o)
OBJECTS_SVC = $(SOURCES_SVC.c:%.c=%.o) $(TARGETS_SVC.c:%.c=%.o)
# Compiler flags
CFLAGS += -g -pipe
LDLIBS += -lnsl
RPCGENFLAGS = -N
# Targets
all : $(CLIENT) $(SERVER)
$(TARGETS) : $(SOURCES.x)
rpcgen $(RPCGENFLAGS) $(SOURCES.x)
$(OBJECTS_CLNT) : $(SOURCES_CLNT.c) $(SOURCES_CLNT.h) $(TARGETS_CLNT.c)
$(OBJECTS_SVC) : $(SOURCES_SVC.c) $(SOURCES_SVC.h) $(TARGETS_SVC.c)
$(CLIENT) : $(OBJECTS_CLNT)
$(LINK.c) -o $(CLIENT) $(OBJECTS_CLNT) $(LDLIBS)
$(SERVER) : $(OBJECTS_SVC)
$(LINK.c) -o $(SERVER) $(OBJECTS_SVC) $(LDLIBS)
clean:
$(RM) core $(TARGETS) $(OBJECTS_CLNT) $(OBJECTS_SVC) $(CLIENT) $(SERVER)
修改test_server.c服务端的处理函数, 提供3种服务:
/*
* This is sample code generated by rpcgen.
* These are only templates and you can use them
* as a guideline for developing your own functions.
*/
#include "test.h"
int *
int_echo_1_svc(int arg1, struct svc_req *rqstp)
{
static int result;
//echo.
result=arg1;
printf("[RPC1] source=%d, echo=%d\n", arg1, result);
return &result;
}
int *
get_str_len_1_svc(char *arg1, struct svc_req *rqstp)
{
static int result;
//get strlen.
result=strlen(arg1);
printf("[PRC2] str=%s, len=%d\n", arg1, result);
return &result;
}
int *
add_1_svc(int arg1, int arg2, struct svc_req *rqstp)
{
static int result;
result=arg1+arg2;
printf("[RPC3] %d+%d=%d\n", arg1, arg2, result);
return &result;
}
客户端test_client.c, 调用这三种服务:
/*
* This is sample code generated by rpcgen.
* These are only templates and you can use them
* as a guideline for developing your own functions.
*/
#include "test.h"
void
testprog_1(char *host)
{
CLIENT *clnt;
int *result_1;
int int_echo_1_arg1=55;
int *result_2;
char *get_str_len_1_arg1="Hello, world";
int *result_3;
int add_1_arg1=10;
int add_1_arg2=20;
clnt = clnt_create (host, TESTPROG, VERSION, "udp");
if (clnt == NULL) {
clnt_pcreateerror (host);
exit (1);
}
result_1 = int_echo_1(int_echo_1_arg1, clnt);
if (result_1 == (int *) NULL) {
clnt_perror (clnt, "call failed");
}
else
printf("[PRC1] echo %d, source %d\n", *result_1,
int_echo_1_arg1);
result_2 = get_str_len_1(get_str_len_1_arg1, clnt);
if (result_2 == (int *) NULL) {
clnt_perror (clnt, "call failed");
}
else
printf("[RPC2] return %d, should %d\n", *result_2,
strlen(get_str_len_1_arg1));
result_3 = add_1(add_1_arg1, add_1_arg2, clnt);
if (result_3 == (int *) NULL) {
clnt_perror (clnt, "call failed");
}
else
printf("[PRC3] %d+%d=%d\n", add_1_arg1, add_1_arg2,
*result_3);
clnt_destroy (clnt);
}OK, 可以调用make了.
生成可执行程序test_server和test_client.
我们启动./test_server, 用rpcinfo看看:
$rpcinfo -p 127.0.0.1
program vers proto port
100000 2 tcp 111 portmapper
30000 1 udp 36307
30000 1 tcp 34883
Bingo! 启动成功.
再开个终端, 尝试一下调用.
./test_client 127.0.0.1
[PRC1] echo 55, source 55
[RPC2] return 12, should 12
[PRC3] 10+20=30
正是我们期望的.
Add By:Jackxiang
make -f Makefile.test
rpc进程Linux,linux RPC 测试(转载)相关推荐
- Linux安装rpc监控系统资源
Linux安装rpc监控系统资源 1.rpc服务需rsh的支持,一般情况下rsh已安装.rpm -qa rsh查看. 2.右键另存为http://heanet.dl.sourceforge.net/s ...
- 【转载】Linux Shell-条件测试
测试 Linux 的Shell中存在一组测试命令,该组命令用于测试某种条件或某几种条件是否真实存在.测试命令是判断语句和循环语句中条件测试工具,所以,其对于编写Shell非常重要. 测试结构 测试命令 ...
- Linux内核RPC请求过程
这篇文章讲讲server端RPC报文的处理流程.server端RPC报文的处理函数是svc_process,这个函数位于net/sunrpc/svc.c中.这个函数须要一个svc_rqst结构的指针作 ...
- linux停止rpc服务,Linux系统安装启动rpc服务,解决Loadrunner监控不到资源问题
前言:在LoadRunner Controller下添加Unix Resource Graphs时,报错如下: Monitor name :UNIX Resources. Cannot initial ...
- 区块链-Linux下USDT测试节点搭建
本文转载自https://lhalcyon.com/blockchain-usdt-node/ Tether Limited 公司基于 Omni Layer 这层协议(Omni Layer proto ...
- oracle EBS查进程,UNIX/LINUX 上针对Oracle EBS 11i的运行的所有进程状态的查询方法:
..........[@more@]UNIX/LINUX 上针对Oracle EBS 11i的运行的所有进程状态的查询方法: 查看Oracle db进程 ps –ef|grep ora_ 查看Net8 ...
- 【Linux 系统启动优化测试工具的使用——grabserial 】
Linux 系统启动优化测试工具的使用--grabserial Linux 系统启动优化测试工具的使用--grabserial 1.grabserial工具安装 2.grabserial工具使用 3. ...
- Kali Linux Web 渗透测试— 第十二课-websploit
Kali Linux Web 渗透测试- 第十二课-websploit 文/玄魂 目录 Kali Linux Web 渗透测试- 第十二课-websploit..................... ...
- linux里进程监控和自动重启,Linux - linux进程监控和自动重启的简单实现
linux进程监控和自动重启的简单实现 目的:linux 下服务器程序会由于各类缘由dump掉,就会影响用户使用,这里提供一个简单的进程监控和重启功能.linux 实现原理:由定时任务crontab调 ...
- RPC框架性能基本比较测试
from: http://www.useopen.net/blog/2015/rpc-performance.html RPC框架性能基本比较测试 gRPC是Google最近公布的开源软件,基于最新的 ...
最新文章
- iOS开源项目周报0420
- TIOBE公布11月榜单:Python势不可挡,超越Java !
- Error: Visual Inheritance is currently disabled because the base … (NET CF)
- MySQL8.0连接url
- partial 分部类-庞大类的瘦身计划
- 人生也要一个中心两个基本点(转载)
- TokenInsight:反映区块链行业整体表现的TI指数较昨日同期下跌1.33%
- 怎么解决tomcat端口占用问题?
- 数据结构和算法二十一
- 「实在RPA学院」电商运营36计:企微批量自动加好友
- python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化
- https安全证书过期的原因
- php判断0点到7点凌晨时间段的方法
- 开发手机蓝牙硬件APP如何实现蓝牙自动重连机制
- Excel表格密码保护的解除方法
- 《途客圈创业记:不疯魔,不成活》一一2.3 早期产品
- Uniswap 的做市原理
- 2022年茶艺师(中级)报名考试及茶艺师(中级)作业考试题库
- 机器学习——朴素贝叶斯
- 三连杆平面机器人的动力学