ICE的proxy使用

原创 2012年03月28日 22:46:32
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

浅入ICE组件编程

浅入ICE组件编程 Liuxuezong 2014.05.22 一、ICE介绍          ICE是ZeroC公司开发的一款高效的开源中间件平台,全称是InternetCommunica...
  • liuxuezong
  • liuxuezong
  • 2014年05月23日 21:00
  • 11968

Ice的主要细节

ICE的整体架构 服务器端: 服务器端通常只有一个通信器(Ice::Communicator),通信器包含了一系列的资源: 如线程池、配置属性、对象工厂、日志记录、统计对象、路由器、定位器、...
  • zhiweiarm
  • zhiweiarm
  • 2013年02月05日 10:54
  • 2476

ICE同步调用与异步调用(1)

1 前言          软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用(...
  • liuxuezong
  • liuxuezong
  • 2014年06月06日 21:09
  • 6433

ice使用过程遇到的问题

1 想要设置请求时间过长则超时 MyAdapter.Endpoints=tcp –p 9999 –t 5000
  • crazyhacking
  • crazyhacking
  • 2014年12月10日 21:15
  • 5320

(2)ICE代理扮演的角色

为什么叫代理代理这个术语在现实世界里,又被称作中间人。由于现实中的人(通信的实体)与人之间可能存在信息不对等的情况,人与人没法直接进行沟通,这个时候就需要有个中间人来解决这样的困局,这个人可以把两人给...
  • chanshimudingxi
  • chanshimudingxi
  • 2016年03月19日 18:23
  • 620

ICE同步调用与异步调用(3)

8.1客户端配置
  • liuxuezong
  • liuxuezong
  • 2014年06月06日 22:08
  • 2726

Ice的更多细节

ICE的整体架构服务器端:服务器端通常只有一个通信器(Ice::Communicator),通信器包含了一系列的资源:如线程池、配置属性、对象工厂、日志记录、统计对象、路由器、定位器、插件管理器、对象...
  • smuggler_2003
  • smuggler_2003
  • 2010年01月12日 20:48
  • 2462

在python中实现基于ICE框架的client、server模型

ICE (Internet Communication Engine) 是zeroc公司实现的通信中间件 几大特性:     1. 多语言支持C++、Java、python, C#等, ...
  • yuchen162009
  • yuchen162009
  • 2015年04月17日 16:15
  • 1751

(2)ICE代理扮演的角色

为什么叫代理代理这个术语在现实世界里,又被称作中间人。由于现实中的人(通信的实体)与人之间可能存在信息不对等的情况,人与人没法直接进行沟通,这个时候就需要有个中间人来解决这样的困局,这个人可以把两人给...
  • chanshimudingxi
  • chanshimudingxi
  • 2016年03月19日 18:23
  • 620

zeroc ice 客户端与服务端通信例子(c++)

zeroc ice 客户端与服务端通信例子(c++) 参考 :http://blog.csdn.net/qingen1/article/details/13052139 以及官方文档【Ice 分布式程...
  • launch_225
  • launch_225
  • 2017年07月06日 14:34
  • 743
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ICE的proxy使用
举报原因:
原因补充:

(最多只允许输入30个字)