slice的AMD方法实现与调用

借由一个interface来说明amd方法的使用:
interface MyInterface
{
int NormalOp(string name, out long l);
["amd"] int AmdOp(string name, out long l);
};


生成的c++代码如下:
class MyInterface : public virtual IceProxy::Ice::Object
{
public:
       // normal方法
virtual Ice::Int NormalOp(const std::string& name, Ice::Long& l);
    
// amd方法
       virtual void Amdop_async(const AMD_MyInterface_AmdOpPtr&, const std::string& name);
};


class AMD_MyInterface_AmdOp : public ...
{
public:
void ice_response(Ice::Int ret, Ice::Long l);
void ice_exception(const std::exception& ex);
void ice_exception();
};


服务器接口实现:
class MyInterfaceI : virtual public MyInterface
{
public:
virtual Ice::Int NormalOp(const std::string& name, Ice::Long& l)
{
   cout<<"name :"<<name<<endl;
l = 10;
return 0;
}
    
        virtual void Amdop_async(const AMD_MyInterface_AmdOpPtr& cb, const std::string& name)
{
       cout<<"name :"<<name<<endl;
_workQueue->add(cb);

// which in workQueue, the code is
// cb->ice_response(0, 10);
}
}


注意:
1、一个接口中的方法要么是同步分派,要么是异步分派,不能二者同时存在,对于每个amd的接口操作均映射一个<operation>_async的分派方法和一个
   AMD_<interface>_<operation>的回调接口类。   
2、如果在服务端的方法实现中发生任何异常,需要捕获并通过对应的回调接口的ice_exception方法返回,ice的runtime不会自动捕获异常并返回给客户端
3、一般来说,如果在服务器端的接口实现中有任何阻塞的行为,例如IO阻塞,同步阻塞,那么最好将接口实现成异步方法分派的,并请请求的callback发送到工作线程中
   由工作线程来处理请求,并在完成请求后在合适的时间通过调用ice_reponse返回结果或者通过ice_exception返回异常
4、异步方法分派仅仅影响到了接口在服务器端的实现,任何客户端的请求操作和服务器端的服务加载均和普通接口一致
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值