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
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