项目地址:http://code.google.com/p/febird
目前已经全部完成,并且取得了非常好的效果 。
使用该RPC的简短代码:
//////////////////////////////////////////////////////////////////////////
// sample usage...
// test.h
namespace febird { namespace rpc {
//////////////////////////////////////////////////////////////////////////
// sample usage...
// test.h
class SampleRPC_Interface1 : public remote_object
{
public:
typedef std::vector<var_uint32_t> vint_vec;
BEGIN_RPC_REGISTER_MF(SampleRPC_Interface1)
RPC_REGISTER_MF(get_val)
RPC_REGISTER_MF(get_len)
RPC_REGISTER_MF(squareVec)
RPC_REGISTER_MF(multiVec)
END_RPC_REGISTER_MF()
RPC_DECLARE_MF(get_val, (rpc_in<int> x))
RPC_DECLARE_MF(get_len, (const std::string& x))
RPC_DECLARE_MF(squareVec, (vint_vec& x))
RPC_DECLARE_MF(multiVec, (vint_vec& z, vint_vec& x, vint_vec& y))
#ifdef RPC_CLIENT_SIDE
void printVec(const vint_vec& vec);
#endif
};
class SampleRPC_Interface2 : public remote_object
{
public:
BEGIN_RPC_REGISTER_MF(SampleRPC_Interface2)
RPC_REGISTER_MF(get_val)
RPC_REGISTER_MF(get_len)
END_RPC_REGISTER_MF()
RPC_DECLARE_MF(get_val, (rpc_in<int> x))
RPC_DECLARE_MF(get_len, (const std::string& x))
};
} } // namespace febird::rpc
// server.cpp
// test_rpc_server.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <tlib/rpc/server.h>
#include <tlib/io/SocketStream.h>
#include <iostream>
#include "../test.h"
namespace febird { namespace rpc {
rpc_return_t SampleRPC_Interface1::get_val(rpc_in<int> x)
{
std::cout << "SampleRPC_Interface1::get_val(rpc_in<int> x=" << x.get() << ")\n";
return x.get();
}
rpc_return_t SampleRPC_Interface1::get_len(const std::string& x)
{
std::cout << "SampleRPC_Interface1::get_len(const std::string& x=\"" << x << "\")\n";
return x.size();
}
rpc_return_t SampleRPC_Interface1::squareVec(vint_vec& x)
{
for (vint_vec::iterator i = x.begin(); i != x.end(); ++i)
{
(*i).t *= (*i).t;
}
return x.size();
}
rpc_return_t SampleRPC_Interface1::multiVec(vint_vec& z, vint_vec& x, vint_vec& y)
{
z.clear();
for (int i = 0; i < x.size(); ++i)
{
z.push_back(var_uint32_t(x[i].t * y[i].t));
}
return 123456;
}
rpc_return_t SampleRPC_Interface2::get_val(rpc_in<int> x)
{
std::cout << BOOST_CURRENT_FUNCTION << "x=" << x.get() << "\n";
return x.get();
}
rpc_return_t SampleRPC_Interface2::get_len(const std::string& x)
{
std::cout << BOOST_CURRENT_FUNCTION << "x=" << x << "\n";
return x.size();
}
} } // namespace febird::rpc
using namespace febird;
using namespace febird::rpc;
typedef SocketStream stream_t;
typedef PortableDataInput <BufferedInputStream> input_t;
typedef PortableDataOutput<BufferedOutputStream> output_t;
int main(int argc, char** argv[])
{
#ifdef _WIN32
WSADATA information;
WSAStartup(MAKEWORD(2, 2), &information);
#endif
rpc_server<input_t, output_t, SocketConnection> server;
server.listen("0.0.0.0:8001");
// register rpc implementation class...
项目地址:http://code.google.com/p/febird
分享到:
相关推荐
tools C++语言框架IDL工具的源码实现 util C++语言框架基础工具库的源码实现 examples C++语言框架的示例代码,包括:快速入门示例、promise编程入门示例、压测程序示例 unittest tars cpp rpc框架的单元测试用例,...
一个RPC例子,远程调用一个计算阶乘的函数。具体编写过程如下: 1、创建一个.idl文件, 为应用程序的远地函数定义一个接口。(RpcFact.idl文件) 2、应用程序属性配置文件 (RpcFact.acf文件) 3、用MIDL编译器编译...
本文将深入探讨如何使用C++和Windows API(WINAPI)实现RPC通讯。 首先,理解RPC的基本原理至关重要。RPC是一种协议,它使得一个程序可以在不知道远程调用细节的情况下,像调用本地函数一样调用远程计算机上的函数...
首先,我们需要创建一个`.idl`文件,如`MyInterface.idl`。在这个文件中,我们将定义我们的接口,包括方法和属性。例如: ```idl [ object, uuid(5A4D3872-6E92-4c8a-A7E6-3F82A1B2A1D0), dual, nonextensible,...
虽然本文未给出具体的示例代码,但下面提供一个简单的概念性的示例来说明如何在Visual C++中调用IDL编译的DLL文件: ```cpp // 假设有一个名为MyIDLFunc的IDL函数,已经被编译成DLL // 在Visual C++中调用这个DLL的...
7. **IDL环境与ENVI**:ENVI(Environment for Visualizing Images)是一个基于IDL的高级图像处理和分析软件。虽然这里的描述没有直接涉及ENVI,但在实际工作中,结合ENVI的高级功能可能会使图像旋转更加高效和精确...
RPC,即Remote Procedure Call(远程过程调用),是计算机网络编程中的一个重要概念,它允许一个程序在不理解底层网络协议的情况下,调用另一个网络上不同机器上的程序。在这个"RPC.rar"压缩包中,主要围绕C++语言在...
例如,如果IDL文件中定义了一个名为`Person`的消息,IDL编译器会生成相应的代码,如C++中的类或Java中的接口。 #### 4. flex和bison flex和bison是两个广泛使用的工具,分别用于词法分析和语法分析。 ##### 4.1. ...
C++ 11映射试图避免限制ORB开发人员的实现自由。对于每个OMG IDL构造,C++ 11映射解释使用C++ 11的构造的语法和语义。如果客户机或服务器程序使用C++ 11映射子句中所描述的结构,则符合此映射(是C++ 11)。
1. **客户端(Client)**:发起RPC调用的一方,它通常需要知道服务接口和方法,但不需要关心服务是如何实现的。 2. **服务端(Server)**:提供服务的一方,它实现了客户端需要调用的接口和方法。 3. **服务注册与...
《Calling C from IDL》是2002年发布...总之,《Calling C from IDL》文档为希望结合使用这两种语言的开发者提供了详细的指导,涵盖了从基本概念到高级技术的方方面面,帮助他们实现更高效、更灵活的数据处理解决方案。
这个压缩包中的"oncrpc"可能是一个实现了RPC功能的库或者项目,可能包含以下内容: - `oncrpc.h`: 定义了RPC相关的数据结构和函数原型,供开发人员在代码中引用。 - `oncrpc.c/cpp`: 实现了RPC的客户端和服务端代码...
总的来说,这个压缩包提供了一个学习和实践如何用IDL创建图像处理界面的实例,特别是涉及到灰度值和RGB颜色空间的调整。对于初学者,这是一次了解IDL GUI编程和图像处理的好机会;对于有经验的开发者,这是一个加深...
Thrift RPC客户端的服务化框架代码主要涉及了两个关键概念:Thrift和RPC(Remote Procedure Call,...在实际应用中,可能还需要考虑线程安全、错误处理、负载均衡、服务注册与发现等高级特性,以构建健壮的分布式系统。
IDL调用ENVI库函数实现非监督分类的代码
在C++中实现CORBA,可以利用其强大的面向对象特性,实现高效且灵活的分布式应用。 **1. CORBA的核心概念** - **ORB (Object Request Broker)**:对象请求代理是CORBA的核心组件,它负责对象的定位、调用以及消息...
在IT行业中,CORBA(Common Object Request Broker Architecture,公共对象请求代理架构...通过这个示例,你应该对如何使用omniORB4.0.5处理IDL文件有了基本的理解,从而能够进一步探索CORBA的更多高级特性和应用场景。
《用C++实现Corba》是一本针对初学者和进阶者全面介绍如何使用C++语言来实现CORBA(Common Object Request Broker Architecture,公共对象请求代理架构)的优秀教程。这本书详细阐述了CORBA的核心概念、设计原则以及...
在服务器端,我们需要创建一个`TProcessor`实例(这里是`helloworld::HelloWorldProcessor`),然后绑定到一个`TSocket`或更高级的传输层,如`TFramedTransport`。接着,我们可以启动一个`TServer`(如`...