RMI For C++(RCF 1.0)

RCF--RPC(远程调用框架) RPC(远程调用框架) 一、 RPC定义 RPC(Remote Procedure Call Protocol)——远程过程调用协议,是一种通过网络从远程计算机请求服务,就像调用本地方法一样,不需要了解底层网络技术的协议。RPC跨越了传输层和应用层,很容易开发分布式应用。 RPC框架通常包括五个部分: User User-stub RPCRuntime Server-stub Server 这 5 个部分的关系如下图所示 User发起一个远程调用,它实际是通过本地调用调User-s 阅读详情

1. 资源准备:

     下载boost库:http://sourceforge.net/projects/boost/files/boost/1.53.0/

     下载RCF1.O: http://download.youkuaiyun.com/download/javacmm2012/5465473

2. 配置工程目录:

把下载后的RCF和Boost库添加到自己项目的附加包含目录中,如下图所示:

3. 编写代码:

(1)先定义交互接口,这个接口头文件在客户端和服务端都要引用,在接口文件中,可以定义结构体等等。注意,所有指定的结构体都要实现串行化,不然不能在网络上正确传输。方法的定义是通过一系列宏定义实现的,如

RCF_METHOD_V1,RCF_METHOD_V2。。。具体可参见RMI_Exercise4\RCF-1.0\include\RCF\Idl.hpp定义,代码可参见:

#ifndef Communication_H_
#define Communication_H_

#include <string>
#include <vector>

#include <RCF/Idl.hpp>
#include <SF/vector.hpp>


struct sUser
{
	//用户结构体
	int _id;				//用户id,唯一值,逐渐递增
	std::string _userName;	//用户名
	std::string _password;	//密码
	template<typename Archive>
	void serialize( Archive &ar, unsigned int version )
	{
		ar & _id & _userName & _password;
	}
};
struct sDateTime
{
	//时间日期类型合法格式:2012.12.12 12:12:12
	short _iYear;
	short _iMonth;
	short _iDay;
	short _iHour;
	short _iMinute;
	short _iSecond;
	template<typename Archive>
	void serialize( Archive & ar, unsigned int version )
	{
		ar & _iYear & _iMonth & _iDay & _iHour &_iMinute & _iSecond;
	}
};
struct sMeeting
{
	int _id;					// 会议Id,唯一值
	sDateTime _sStart;			// 会议开始日期
	sDateTime _sEnd;			// 会议结束日期
	std::string _strTitle;		// 会议的主题
	std::vector<sUser> _vecUser;// 会议所有成员,只要与会成员中的一个想删除会议,就会删除成功
	template<typename Archive>
	void serialize( Archive & ar, unsigned int version )
	{
		ar & _id & _sStart & _sEnd & _strTitle &_vecUser;
	}
};


RCF_BEGIN(MyService, "MyService")

	//获取所有的会议
	RCF_METHOD_V1(void, getAllMeeting,std::vector<sMeeting>&);

	//获取所有的用户
	RCF_METHOD_V1(void, getAllUser,std::vector<sUser>&);

	//添加一个议程
	RCF_METHOD_V4(void, addMeeting,std::string,std::string,sMeeting,bool&);

	//登陆接口,成功返回true,失败返回false
	RCF_METHOD_V3(void, loginIn,std::string,std::string,bool&);

	//注册用户接口,注册成功放回true, 失败返回false
	RCF_METHOD_V3(void, registerUser,std::string,std::string,bool&);

	//查询用户当前的会议
	RCF_METHOD_V4(void, queryMeeting,std::string,std::string,std::vector<sMeeting>&,bool&);

	//删除指定会议
	RCF_METHOD_V4(void, deleteMeeting,std::string,std::string,int,bool&);

	//删除所有会议
	RCF_METHOD_V3(void, deleteAllMeeting,std::string,std::string,bool&);
RCF_END(MyService);

#endif ///< Communication_H_
(2) 编写服务端代码:先定义一个用来实现接口类中所有方法的代理类,类中必须包含接口中定义的所有方法的实现。代码可参见:

#ifndef MyServiceImpl_H_
#define MyServiceImpl_H_

#include <fstream>
#include "../IDL/Communication.h"

class CMyServiceImpl
{
public:
	void  getAllMeeting( std::vector<sMeeting>& vecMeetign);

	void  getAllUser( std::vector<sUser>& vecUser);

	void  loginIn(std::string username,std::string password,bool& bResult);

	void  registerUser( std::string username,std::string password,bool& bResult);

	void  queryMeeting(std::string username,std::string password,std::vector<sMeeting>& vecMeeting,bool& bResult);

	void  deleteMeeting(std::string username,std::string password,int meetingId,bool& bResult);

	void  deleteAllMeeting(std::string username,std::string password,bool& bResult);

	void  addMeeting(std::string username,std::string password,sMeeting meeting,bool& bResult);

public:
	CMyServiceImpl();	//构造函数,读取配置文件
	~CMyServiceImpl();	//析构函数,将内容写入到配置文件中去

private:
	std::vector<sUser> m_vecUser;		//用户列表
	std::vector<sMeeting> m_vecMeeting;	//所有的会议列表
};

#endif  ///<MyServiceImpl_H_

编写这个类以后,我们就把这个类绑定到我们的服务上去,参见如下代码:

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

#include <RCF/RcfServer.hpp>
#include <RCF/TcpEndpoint.hpp>

#include "MyServiceImpl.h"



int main()
{
	CMyServiceImpl myServiceImpl;
	RCF::RcfServer server(RCF::TcpEndpoint("0.0.0.0", 50001));//指定绑定的Ip和端口号
	server.bind<MyService>(myServiceImpl);//MyService是IDL中定义的服务名
	server.start();
	server.waitForStopEvent();
	return 0;
}

注意:在服务端和客户端的工程中都要包含RCF.cpp, 这时RCF库中的一个文件,不然可能会出现链接错误。


(3) 编写客户端代码:代码可参见:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
#include <iomanip>
#include <sstream>

#include "../IDL/Communication.h"

#include <RCF/TcpEndpoint.hpp>

using namespace std;

int main()
{
	try
	{
		RcfClient<MyService> client(RCF::TcpEndpoint("127.0.0.1", 50001));//指定服务器的Ip和端口号
		string username,userpassword;
		bool bIsAdmin = false;
		bool bLoginIn = false;
		bool bResult = false;
	         //直接调用接口中的方法,就可以啦
		client.registerUser(tempusername,temppassword,bResult);
                //sMeeting meeting;
		//client.addMeeting(username,userpassword,meeting,bResult);
						
		//client.deleteMeeting(username,userpassword,meetingId,bResult);
				
		//client.deleteAllMeeting(username,userpassword,bResult);

			
		
	}
	catch(const std::exception &e)
	{
		cout << "Caught exception:\n";
		cout << "Type: " << typeid(e).name() << "\n";
		cout << "What: " << e.what() << "\n";
	}

	return 0;
}

注意:有可能编译不过,这时候看下错误提示,到底是什么没有定义,在我的电脑上,需定义以下宏定义,才能使编译通过,如图:






C++多继承动态交叉转换dynamic_cast 1. 问题简述:          有如下源代码:          Class BaseA; Class BaseB; Class SubClass:public BaseA,public BaseB { ... }      现有如下变量定义:  BaseA* insA = new SubClass(...); BaseB* insB; 请问如何将insA指向的对象正确赋值给BaseB 阅读详情

相关推荐

RPC通信框架 RCF:简介与编程实例

首先,我们需要在服务器端定义一个接口。创建一个名为。

2301_79325657的博客 939

Socket编程系列之7:RCF远程调用框架编程实战

Socket编程系列之7:RCF远程调用框架编程实战Socket编程系列之7:RCF远程调用框架编程实战,本课程包括Windows搭建RCF环境及Helloworld案例、Linux开发必备之GCC与CMake、Linux编译RCF及跨平台案例实战、基于RCF框架编程原理流程步骤解析、基于RCF框架的异步调用案例实战、基于RCF框架的发布订阅案例实战等。-------------------------------------------------------注意,本系列Socket编程系列初步计划包括如下课程:Socket编程系列之1:Linux-API网络编程入门实战Socket编程系列之2:Windows-API网络编程入门实战Socket编程系列之3:Libevent网络编程入门实战Socket编程系列之4:Libcurl网络编程入门实战Socket编程系列之5:Boost-ASIO网络编程入门实战Socket编程系列之6:Libuv网络编程入门实战Socket编程系列之7:RCF远程调用框架编程实战

【思考模型框架】使用RCF团队创新模型,促进团队创新和解决问题的方法论。

RCF团队创新模型,也被称为“Riveting Challenge Framework”(引人入胜的挑战框架)RCF团队创新模型,是一种促进团队创新和解决问题的方法论。RCF团队创新模型,是一种旨在通过提出吸引人的挑战来激发团队创造力和协作精神的方法。RCF团队创新模型,通过设定一个令人兴奋的目标,促使团队成员超越常规思维,共同探索创新解决方案。RCF团队创新模型,通过设立吸引人的挑战,激发团队的创新潜能,适用于需要突破常规、寻求创新解决方案的场景。

奶爸的编程之路,也就一周冷个三天 1146

让C++也支持RMI

http://www.vckbase.com/document/viewdoc/?id=1846 作者:王树栋下载源代码摘要RMI( Remote Method Invocation),远程方法访问,作为java最早的分布式解决方案给网络程序的设计带来了极大的方便。尤其是在做C/S开发中,程序员不必关心底层网络通讯细节,即可像调用本地对象方法一样调用远端对象方法,方便了程序员编程。

杨德龙的专栏 3027

(转)用c++实现java的rmi服务

NULL 博文链接:https://eric-gcm.iteye.com/blog/1420827

C++ RMI代码

C++实现RMI技术实例,供初学者参考使用。基于cs结构。

RCF简要概述

RCF简要概述

qq_41421755的博客 4353

Python爬虫实战:用Selenium+ChromeDriver批量抓取政府网站政策文件(附完整代码)

本文详细介绍了使用Python的Selenium和ChromeDriver进行政府网站政策文件批量抓取的实战技巧。从环境配置、动态页面元素定位到分页机制破解和反爬虫策略,提供了完整的解决方案和代码示例,帮助开发者高效获取结构化政策数据。

weixin_42531710的博客 265

c++ RMI demo(使用RCF库)

作业要求 下载RCF库并编译成静态库/动态库 宿主机操作系统:ubuntu wget https://www.deltavsoft.com/downloads/RCF-3.2.413.tar.gz #下 载RCF压缩包 tar xvf RCF-3.2.413.tar.gz # 解压到本地文件夹 在/root/code/rcf/RCF-3.2.413文件夹下 g++ -I include/ src/RCF/RCF.cpp -lpthread -ldl -luuid -c # 生成obj文件 # -l:链

最佳损友1020的博客 1538

Windows下RISC-V开发环境搭建:xpack-riscv-none-elf-gcc安装配置全攻略

本文详细介绍了在Windows平台下搭建RISC-V开发环境的完整流程,重点讲解xpack-riscv-none-elf-gcc工具链的安装配置方法。从环境变量设置到VSCode集成开发环境搭建,涵盖汇编程序和C程序开发实践,为开发者提供一站式解决方案,助力快速掌握RISC-V架构开发技能。

weixin_26765287的博客 437

HDRnet——双边滤波和仿射变换的摇身一变

layer层数越多,下采样得到的图越小,low-level features的好处是最后的grid会更coarser,最后的特征图的感受野也越多,非线性更好,表达力更强。所以最终grid是5维的[B,in*out,n,H,W],permute之后是[B,H,W,n,in*out],B是batchsize,n表示对guide的量化级数,in*out表示每个cell的变换系数。这部分的处理对象是低分辨率图,利用CNN进行特征提取(局部和全局),最后fuse得到grid,这里面包含了变换的系数。

zcg1942的博客 1576

开源项目之C++远程方法调用框架 RMI for C++

RMI for C++ 是一个专为 C++ 语言提供的远程方法调用框架,与 CORBA 不同的是,CORBA 适合不同的编程语言之间进行互操作,而 RMI for C++ 专为 C++ 涉及,因此效率更高,速度更快,开发也便捷。工程如图: 工程需要用到第三方库boost(已放到源码包中),Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动

banketree 8294

VASP能带计算避坑指南:从CHGCAR读取失败到成功解决的全过程

本文深度解析VASP能带计算中常见的“CHGCAR读取失败”报错,并提供从静态自洽到非自洽计算的全流程避坑指南。核心解决方案包括使用CONTCAR替代POSCAR、调整SYMPREC参数以处理对称性判定问题,并推荐利用vaspkit工具自动化生成输入文件,确保计算流程稳健高效。

weixin_29245767的博客 770

RCF - C ++的进程间通信

介绍 RCF(远程调用框架)是一个C ++ IPC框架,提供了一种在C ++程序中实现进程间通信的简单而一致的方法。它基于强类型的客户端/服务器接口的概念,这是基于IDL的中间件(如CORBA和DCOM)的用户熟悉的概念。然而,通过仅适用于C ++,RCF可以利用C ++特定的语言特性,允许以更简单和更少的混乱方式来制定进程间调用。 RCF通过支持压缩(zlib)和多个传输(TCP

swartz_lubel的专栏 6003

STM32+LoRa模块实战:从环境搭建到数据传输完整指南(附避坑清单)

本文提供STM32与LoRa模块从环境搭建到数据传输的完整实战指南,涵盖硬件连接、开发环境配置、AT指令设置、频段优化及低功耗设计等关键步骤,特别针对常见问题提供解决方案和避坑清单,助力物联网开发者高效实现远距离低功耗通信。

weixin_29168813的博客 289

新手必看:Infineon Memtools烧录配置全流程(附常见错误解决方案)

本文为嵌入式开发新手提供了Infineon AURIX开发环境搭建与Memtools烧录的全流程实战指南。详细解析了ADS、DAS和Memtools三大核心工具的角色与协同关系,并重点讲解了Memtools的图形界面配置步骤、烧录操作流程,以及针对“无法连接设备”、“编程失败”等常见错误的系统性排查与解决方案,帮助开发者快速上手并规避典型陷阱。

weixin_29189377的博客 634

RCF的优势--分布式应用

RCF(远程调用框架)是一个可以移植的C++进程间通信框架,使用C++语言特性,提供了一个简单高效的编写分布式C++软件的途径。RCF利用编译时多态清晰分开了接口和实现. 和传统的RPC框架如CORBA,DCOM,.NETRemoting,WCF,WS-*,等所支持的面向对象方式不一样,RCF提供了一种面向接口的方式。RCF让你明确指定接口和数据,而不是产生复杂的对象模型和不透明的串行化代码,这样

一缕阳光的博客 1484

k8s RoCE 部署: k8s-rdma-shared-dev-plugin + macvlan cni

写给自己的入门篇 文章目录前言一、创建 k8s 集群二、启用 primary network三、启用 secondary networkk8s-rdma-shared-dev-pluginMultus CNISecondary CNIMulti-Network CRD四、启用 pod五、在 pod 中启动 RoCE 流量总结 前言 写给自己的扫盲篇。后续会在原理方面持续更新 一、创建 k8s 集群 k8s 集群的创建有多种方法,可以按照官方文档的说明来.

sunshuying1010的博客 9776

RPC(Remote Procedure Call Protocol)远程通信框架

一、简介 官方网站:Remote Call Framework (RCF) - Delta V Software 下载版本:RCF 3.2.403 ubuntu 20 https://www.deltavsoft.com/downloads/RCF-3.2.413.tar.gz RCF(Remote Call Framework,远程调用框架)是一个C++的框架。这个框架用来为实现C++程序进程间调用提供一个简单和一致(consistent)的方法。这个框架基于强类型的C/S接口概念,类似于用.

q610098308的专栏 1451

Calibre LVS 问题解析

LVS常见问题与解决办法

m0_61544122的博客 2万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

RPC通信框架——RCF介绍

现有的软件中用了大量的COM接口,导致无法跨平台,当然由于与Windows结合的太紧密,还有很多无法跨平台的地方。那么为了实现跨平台,支持Linux系统,以及后续的分布式,首要任务是去除COM接口。 在对大量框架进行调研后,决定使用RCF替换COM接口。 RPC通信框架 CORBA ICE Thrift zeromq dbus RCF ...

dfe30001的博客 931

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

R包 rmi源码安装报错解决办法

看了一下上面的编译报错信息,发现有一条是no member named 'is_null_pointer' in namespace 'std';从网上查阅了一下,发现必须使用c++14才能通过编译,但是rmi包用的是c++11,于是就报错了。解决方法其实很简单,就是更改一下src文件夹中的Makevars.win文件,将CXX11改为CXX14,然后将源码重新打包成tar.gz文件就可以正常编译安装了。

Mazhenfeng_的博客 339

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

RCF简介

RCF简介1. What is RCF?2. Why should I use RCF? 1. What is RCF? RCF (Remote Call Framework,远程调用框架)是一个面向C++的跨平台进程间通信框架。 与其他通信框架不同,RCF不使用单独的IDL(Interface Definition Language,接口定义语言)。RCF接口是在C++中直接定义的,用户定义数据...

梦在哪里的博客 7100

RCF:一个相当不错的C++分布式RPC框架

<br />    RCF(远程调用框架)是一个可以移植的C++进程间通信框架,使用C++语言特性,提供了一个简单高效的编写分布式C++软件的途径。RCF利用编译时多态清晰分开了接口和实现. 和传统的RPC框架如CORBA,DCOM,.NETRemoting,WCF,WS-*,等所支持的面向对象方式不一样,RCF提供了一种面向接口的方式。RCF让你明确指定接口和数据,而不是产生复杂的对象模型和不透明的串行化代码,这样你能自由实现自己的对象模型。<br /><br />   RCF的其他优势:<br />· 

seebit的专栏 1万+

C++反射的实现

前言反射的概念: 指程序在运行时,访问、检测和修改它本身状态或行为的一种能力。wikipedia 简单的来说,就是一种自描述和自控制的能力。如果联想到镜子,就可以很好的理解,你能通过镜子看到自己,包括自己的动作,自己的外表。唯一不同的地方是,计算机语言的反射能力还包含对看到的自己采取措施。反射的作用在计算机编程语言中,反射机制可以用来: 获取类型的信息,包括属性、方法 动态调用方法 动态构造对象

brightlee`s blog 9966

rmi 工作原理 (转)

RMI(Remote Method Invocation,远程方法调用)是Java的一组拥护开发分布式应用程序的API。RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。它大大增强了Java开发分布式应用的能力。简单地说,这样使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用。这...

benx 241
上一篇: 使用_CRTDBG_LEAK_CHECK_DF检查VC程序的内存泄漏(转)
下一篇: 跟我从头学TAO编程(1)--获取并编译TAO
静水若流深
博客等级 码龄14年 5粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值