最近学习了异步通信这一章:异步包括服务端的异步分派(AMD)以及客户端的异步调用(AMI)。
下面介绍一下如何实现简单的异步通信(主要实现了客户端的异步调用,AMD暂未体现):
1.首先编写Ice文件:Demo.ice
- module Demo{
- interface Employee{
- ["amd"]void add(int a, int b, out int sum);
- };
- };
["amd"]表示的是元数据,指定服务器端将提供异步分派的方法函数。该add函数中有两个in参数;一个out参数,作为回传参数。
2.映射到C++代码:使用命令 slice2cpp Demo.ice
经过映射之后,程序将生成Demo.h与Demo.cpp文件,如下面部分代码所示Demo.h
- // ....More code before
- namespace Demo
- {
- class Employee : virtual public ::Ice::Object
- {
- public:
- typedef EmployeePrx ProxyType;
- typedef EmployeePtr PointerType;
- virtual ::Ice::ObjectPtr ice_clone() const;
- virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::Current()) const;
- virtual ::std::vector ice_ids(const ::Ice::Current& = ::Ice::Current()) const;
- virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::Current()) const;
- static const ::std::string& ice_staticId();
- virtual void add_async(const ::Demo::AMD_Employee_addPtr&, ::Ice::Int, ::Ice::Int, const ::Ice::Current& = ::Ice::Current()) = 0;
- // ... More code here
- };
- // ...
3. 实现服务端程序
新建Server.cpp文件,将Demo.h中的虚方法add_async()实现。并新建servant类来继承Ice::application类,初始化Ice run time ,同时将servant注册到对象适配器中去。
- #include
- #include
- #include
- #include
- using namespace std;
- using namespace Demo;
- class Manager : virtual public Employee,public IceUtil::Monitor
- {
- public:
- Manager():_sum(0){}
- ~Manager(){}
- virtual void add_async(const ::Demo::AMD_Employee_addPtr& add_ptr, int a, int b, const ::Ice::Current& =::Ice::Current())
- {
- _sum = a+b;
- sleep(1);
- cout
关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?
立即登录/注册


微信扫码登录