关闭

ICE的proxy使用

标签: stringssltcpiteratorfacetinterface
3926人阅读 评论(0) 收藏 举报
分类:
1、在ICE的客户端获取代理的方式如下:
   A、Ice::ObjectPrx p = communicator->stirngToProxy("MyProxy:tcp -h 10.0.0.1 -p 12345");
   B、Ice::ObjectPrx p = communicator->propertyToProxy("MyProxy"); 
      在配置文件中配置MyProxy=MyProxy:tcp -h 10.0.0.1 -p 12345
   C、Ice::ObjectPrx p = myproxy.ice_oneway();
   D、MyProxyPrx p = myservant->op();   (slice: MyProxy * op())
2、每个proxy对象都需要绑定一个远地的端点信息,其字符串的端点格式如下:
   identity -f facet -t -o -O -d -D -s @ adapter_id : endpoints
   
   其中endpoints的语法如下:
   tcp -h host -p port -t timeout -z
   udp -v major.minor -e major.minor -h host -p port -z --ttl TTL --interface INTF
   ssl -h host -p port -t timeout -z
   opaque -t type -v value
3、注意在proxy上有一些工厂方法能够clone出来一个新的proxy,但是新的proxy会根据工厂方法过滤掉一些端点信息
   ice_secure  只使用ssl端点信息
   ice_batchDatagram、ice_datagram 只使用udp端点信息
   ice_oneway、ice_twoway、ice_batchOneway 使用tcp和ssl端点信息
4、可以设置ICE的proxy的默认属性,例如:Ice.Default.Secure = 0
   也可以强制ICE的proxy的属性,例如:Ice.Override.Secure = 1
5、proxy的消息调用过程中,除了可以传递参数外,还可以传递上下文信息,客户端代码例如:
   Ice::Context ctx;
   ctx["Property1"] = "value1";
   ctx["Property2"] = "value2";
   
   MyProxy->op(ctx);
   由于上下文信息仅仅能够传递字符串信息,无强制类型限制,在请求的编码和解码上也存在一定的效率问题,因此不是
   非得使用上下文,尽量不要使用
   
   服务器端代码如下:
   void MyServerI::op(const Ice::Current& c)
   {
      Ice::Context::const_iterator l = c.ctx.find("Property1");
 if (l != c.ctx.end() && l->second == "value1")
 {
 
 }
 
 l = c.ctx.find("Property2");
 if (l != c.ctx.end() && l->second == "value2")
 {
 
 }
   }
6、 使用communicator的隐式上下文传递,通过如下方法获取communicator上的隐式上下文:
   Ice::ImplicitContextPtr Ice::CommunicatorI::getImplicitContext() const
   
   然后通过隐式上下文的接口设置communicator上的隐式上下文,这样导致基于该communicator的所有代理请求都会携带设置的上下文
   local interface ImplicitContext
   {
       Context getContext();
       void setContext(Context newContext);
       string get(string key);
       string put(string key, string value);
       string remove(string key);
       bool containsKey(string key);
   };
7、proxy上的超时设置,可以通过如下方法指定proxy上的请求超时时间
   A、Ice::ObjectPrx MyTimeOutProxy = MyProxy.ice_timeout(10000);   10秒超时
   B、通过代理的端点指定:ident:tcp -h somehost -t 5000:ssl -h somehost -t 5000
   C、通过配置属性设置:Ice.Override.ConnectTimeOut、Ice.Override.TimeOut
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:92398次
    • 积分:1207
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:3篇
    • 译文:0篇
    • 评论:23条
    文章分类
    最新评论