python使用xmlrpc远程调用C++服务

通常软件开发过程中会出现语言异构现象,本文使用xmlrpc完成python和C++的调用,

主要参考https://blog.csdn.net/qq_28453017/article/details/79931620。

python客户端

from xmlrpc.client import ServerProxy
import time
tic = time.time()
s = ServerProxy("http://localhost:8088")
result = s.add(1,2)
toc = time.time()
print(result ,toc-tic)

在这里插入图片描述
若将localhost 改为127.0.0.1
可以将速度提升至每秒88次

C++服务端

配置

主要参考https://blog.csdn.net/qq_28453017/article/details/79931620。
具体细节过程中:

  • 运行ConfigureWin32.bat文件
  • 新建C++工程
  • Additional Include Directories 引入xmlrpc-c-code-r3067-super_stable\include
  • Library Directories 引入 D:\task\temp_task\xmlrpc\xmlrpc-c-code-r3067-super_stable\bin\Debug-Static-Win32
  • Link->input->Additional Library 引入
    libxmlrpc++.lib
    libxmlrpc.lib
    libxmlrpc_abyss++.lib
    libxmlrpc_abyss.lib
    libxmlrpc_client.lib
    libxmlrpc_server.lib
    libxmlrpc_server_abyss.lib
    libxmlrpc_server_cgi.lib
    libxmlrpc_server_w32httpsys.lib
    libxmlrpc_util++.lib
    libxmlrpc_util.lib
    libxmlrpc_xmlparse.lib
    libxmlrpc_xmltok.lib

代码

#include <assert.h>
#include <iostream>
#define XMLRPC_CPP 1
#define XMLRPC_C 0

#if XMLRPC_CPP
#include <xmlrpc-c/base.hpp>
#include <xmlrpc-c/registry.hpp>
#include <xmlrpc-c/server_abyss.hpp>

class sampleAddMethod : public xmlrpc_c::method {
public:
	sampleAddMethod(){}
	void execute(xmlrpc_c::paramList const& paramList,
		xmlrpc_c::value* const retvalP =NULL) {
		

		int a = paramList.getInt(0);
		int b = paramList.getInt(1);
		*retvalP = xmlrpc_c::value_int(a+b);
		/*std::cout << "struct success**" << std::endl;
		assert(struct_param["first"].type() == xmlrpc_c::value::TYPE_INT);
		assert(struct_param["first"].type() == xmlrpc_c::value::TYPE_INT);
		xmlrpc_c::value_int value1 = struct_param["first"];
		xmlrpc_c::value_int value2 = struct_param["second"];
		int const addend = value1.cvalue();
		int const adder = value2.cvalue();
		paramList.verifyEnd(1);
		*retvalP = xmlrpc_c::value_int(addend + adder);*/


	}

};
#endif
int main()
{
	//std::cout << "Hello World!\n";
	xmlrpc_c::registry myRegistry; 	
	xmlrpc_c::methodPtr const sampleAddMethodP(new sampleAddMethod); 	
	myRegistry.addMethod("add", sampleAddMethodP); 	
	xmlrpc_c::serverAbyss myAbyssServer(myRegistry, 8088              // TCP port on which to listen		
		//"/tmp/xmlrpc_log"  // Log file		
	); 	
	myAbyssServer.run();	// xmlrpc_c::serverAbyss.run() never returns	
	assert(false);
	return 0;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
介绍RCP的实现原理 目录 1. 前言 2 2. 基本概念 3 2.1. IDL 3 2.2. 代理(Proxy) 3 2.3. 存根(Stub) 4 3. 三要素 4 3.1. 网络通讯 4 3.2. 消息编解码 5 3.3. IDL编译器 5 4. flex和bison 5 4.1. 准备概念 5 4.1.1. 正则表达式(regex/regexp) 6 4.1.2. 符号∈ 6 4.1.3. 终结符/非终结符/产生式 6 4.1.4. 记号(Token) 6 4.1.5. 形式文法 7 4.1.6. 上下文无关文法(CFG) 7 4.1.7. BNF 8 4.1.8. 推导 8 4.1.9. 语法树 8 4.1.10. LL(k) 9 4.1.11. LR(k) 9 4.1.12. LALR(k) 9 4.1.13. GLR 9 4.1.14. 移进/归约 9 4.2. flex和bison文件格式 9 4.2.1. 定义部分 10 4.2.2. 规则部分 10 4.2.3. 用户子例程部分 10 4.3. flex基础 10 4.3.1. flex文件格式 11 4.3.2. 选项 11 4.3.3. 名字定义 11 4.3.4. 词法规则 12 4.3.5. 匹配规则 12 4.3.6. %option 13 4.3.7. 全局变量yytext 13 4.3.8. 全局变量yyval 13 4.3.9. 全局变量yyleng 13 4.3.10. 全局函数yylex 13 4.3.11. 全局函数yywrap 13 4.4. bison基础 14 4.4.1. bison文件格式 14 4.4.2. %union 14 4.4.3. %token 15 4.4.4. 全局函数yyerror() 15 4.4.5. 全局函数yyparse() 15 4.5. 例1:单词计数 15 4.5.1. 目的 15 4.5.2. flex词法文件wc.l 16 4.5.3. Makefile 16 4.6. 例2:表达式 17 4.6.1. 目的 17 4.6.2. flex词法exp.l 17 4.6.3. bison语法exp.y 17 4.6.4. Makefile 19 4.6.5. 代码集成 19 4.7. 例3:函数 20 4.7.1. 目的 20 4.7.2. func.h 20 4.7.3. func.c 21 4.7.4. IDL代码func.idl 22 4.7.5. flex词法func.l 22 4.7.6. bison语法func.y 24 4.7.7. Makefile 27 5. 进阶 27 5.1. 客户端函数实现 27 5.2. 服务端函数实现 28 5.2.1. Stub部分实现 28 5.2.2. 用户部分实现 29 6. 参考资料 29
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值