1、当使用ICE的proxy进行方法调用时,ICE运行环境会建立一个到服务器的连接。当proxy提供了多个endpoint时
   默认的ICE运行环境选择endpoint的行为为random,可以通过ice_endpointSelection设置选择endpoint的方式为order
   也可以通过设置属性:Ice.Default.EndpointSelection、name.EndpointSelection来改变endpoint的选择策略
2、ICE的连接在失败时会重试,重试的规则取决于属性Ice.RetryIntervals,默认取值为0,即立即重试一次
   可以配置成如下形式:Ice.RetryIntervals=0 10 50 100
   可以配置Ice.Trace.Retry来跟踪连接的重试
3、ICE支持给每个连接一个唯一的ID标示,来让应用控制连接的使用行为,通过调用proxy的ice_connectionId方法
   来给其建立的连接命名。当然使用相同连接ID的代理意味着共享了相同的连接
4、ICE会对proxy上的建立的连接进行cache,以确保下次方法调用时尽可能的使用已经建立的连接,有时如果应用针对
   某个proxy有多个endpoint,并且希望在这些endpoint之间保持负载均衡的方法调用,那么可以通过设置属性
   ice_connectionCached(false)来关闭连接cache,当然这也会为频繁的连接建立带来足够的开销
5、ICE的每个连接都有两个超时时间:ice_timeout、ice_connectiontimeout,分别对应消息的超时时间和连接建立
   的超时时间,可以通过在代理上调用上述方法来设置超时,也可以通过属性Ice.Override.Timeout、Ice.Override.ConnectTimeout
   来强制改变超时时间
6、ICE运行环境针对每个communicator可以设置连接ACM,分别为Ice.ACM.Client和Ice.ACM.Server,默认取值为60s
   意味着如果连接存在60s的idle时间,那么连接将会自动关闭。可以设置取值为0来禁用IDLE检测机制。那么连接建立后
   则不会关闭,直到communicator关闭为止。ICE检测空闲连接的时间间隔为Ice.MonitorConnections,取值在5s到5m之间。
   如果你使用了glacier2来进行防火墙的策略调度,那么你最好关闭ACM,否则可能会导致过早的关闭客户端连接而导致
   回调无法成功
7、程序中获取连接:客户端可以使用proxy->ice_getConnection(),服务器端可以使用current.conn
8、连接对象提供的接口方法如下:
   local interface Connection 
   {
       void close(bool force);                    // 关闭连接,基本上很少显示调用
       Object* createProxy(Identity id);          // 在使用双向的防火墙策略时,常在客户端使用来创建回调对象
       void setAdapter(ObjectAdapter adapter);    // 设置代理的对象适配器,也常用于双向连接
       ObjectAdapter getAdapter();                // 获取adapter对象
       Endpoint getEndpoint();                    // 获取endpoint端点信息
       void flushBatchRequests();                 // 刷新批量请求
       string type();                             // 返回协议类型,类似如:tcp、udp、ssl
       int timeout();                             // 返回超时时间
       string toString();                         // 串化
       ConnectionInfo getInfo();                  // 获取连接的相关连接信息,类似如tcp端口、udp信息等
    };
注意getEndpoint和getInfo返回的是基类信息,需要根据type方法的返回值来进行向下转型获取详情
9、
客户端双向连接的使用:
Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapter("");
 // 创建默认adapter,无名称,无端点
    Ice::Identity ident;
    ident.name = IceUtil::generateUUID();
    ident.category = "";
    CallbackPtr cb = new CallbackI;                                         // 创建回调对象
    adapter->add(cb, ident);                                                // 添加回调对象为servant
    adapter->activate();                                                    // 激活adapter
    proxy->ice_getConnection()->setAdapter(adapter);                        // 设置代理对象的连接adapter为当前adapter
    proxy->addClient(ident);                                                // 传递callback的ID给服务器
10、服务器端双向连接的使用:
    CallbackPrx client = CallbackPrx::uncheckedCast(curr.con->createProxy(ident)); // 在连接上使用callback的id来创建代理
    client->notify();                                                              // 回调代理
注意,该处创建的callbackprx代理不能修改其相关属性:类似timeout、twoway、datagram等,同时需要关闭ACM机制来防止
不合事宜的连接关闭
11、客户端的双向调用接收callback的回调是在客户端线程池中,但是此时可能客户端线程池正在阻塞在客户端请求上,那么
    你最好配置客户端线程池的线程个数大于1,否则这样的嵌套调用会导致线程的死锁等待

ICE的连接机制的更多相关文章

  1. ZeroC Ice启用SSL通讯的配置

    Zeroc ICE ( Internet Communications Engine )中间件号称标准统一,开源,跨平台,跨语言,分布式,安全,服务透明,负载均衡,面向对象,性能优越,防火墙穿透,通讯 ...

  2. 第3月第2天 find symbolicatecrash 生产者-消费者 ice 引用计数

    1.linux find export find /Applications/Xcode.app/ -name symbolicatecrash -type f export DEVELOPER_DI ...

  3. c#Ice开发之环境配置(一)

    第一步,基于Windows下的安装,所以下载windows版的Ice,官网最新版本是Ice3.5.1: http://www.zeroc.com/download/ 安装完成可以在vs-工具的最下面看 ...

  4. Ice分布式程序设计—IceBox(Hello World Application)

    忙了三天,总算浏览完此书.藉此记下 Ice 的 IceBox 服务框架. 在此用 IceBox 框架写 Hello World 程序,即以载体来体现其特性. 第一步:编写 Slice 文件,映射生成 ...

  5. ZeroC Ice 暂记

    摘自: http://weibo.com/p/1001603869896789339575 原文地址: http://www.oschina.net/question/865233_242146 吴治 ...

  6. webrtc进阶-信令篇-之三:信令、stun、turn、ice

    webRTC支持点对点通讯,但是webRTC仍然需要服务端:  . 协调通讯过程中客户端之间需要交换元数据,    如一个客户端找到另一个客户端以及通知另一个客户端开始通讯.  . 需要处理NAT(网 ...

  7. VS2012配置使用ICE通信接口

    1.下载安装Ice-3.5.1.msi http://www.zeroc.com/download.html 2.添加安装路径到环境变量path,D:\Program Files (x86)\Zero ...

  8. clang 搭建和编译boost 和zero ICE库 (Ubuntu10 64)

    相关介绍资料如下: Boost编译http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.gz/downlo ...

  9. Ice的HelloWorld(Java)

    Ice是一种面向对象的中间间平台,入门ice,简单的HelloWorld是必不可少的. 转载请注明http://www.cnblogs.com/zrtqsk/p/3745286.html,谢谢. 一. ...

随机推荐

  1. CS224n学习资源汇总

    一.课程网站: http://web.stanford.edu/class/cs224n/archive/WWW_1617/index.html 二.视频(中文字幕) http://www.mooc. ...

  2. java.lang.IllegalStateException: availableProcessors is already set to [4], rejecting [4]

    Links: 1.Getting availableProcessors is already set to [1], rejecting [1] IllegalStateException exce ...

  3. Python之函数2 嵌套,作用域和闭包(Day12)

    一.函数对象 1.函数是第一类对象,即函数可以当做数据传递 1.1 可以被引用 1.2 可以当做参数传递 1.3 返回值可以是函数 1.4 可以当做容器类型的元素 二.函数的嵌套 1.函数嵌套的调用: ...

  4. SQLServer导入Excel,复杂操作

    导入Excel 先导入的时候报错了, 提示未在本地计算机上注册"Microsoft.ACE.Oledb.12.0"提供程序.(System.Data),去网址下个软件安装就搞定了, ...

  5. LeetCode:矩阵置零【73】

    LeetCode:矩阵置零[73] 题目描述 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [   [1,1,1],   ...

  6. val() attr('value')

    val() 只能更改输入框内的值,能更改value属性, 在浏览器中体现不出value被改变 attr('value') 都可以 谷歌浏览器 val,attr都能获取输入框最新的value值

  7. Shell 条件判断总结

    -b file 若文件存在且是一个块特殊文件,则为真 -c file 若文件存在且是一个字符特殊文件,则为真 -d file 若文件存在且是一个目录,则为真 -e file 若文件存在,则为真 -f ...

  8. 【HackerRank】The Love-Letter Mystery

    James找到了他的朋友Harry要给女朋友的情书.James很爱恶作剧,所以他决定要胡搞一下.他把信中的每个单字都变成了回文.对任何给定的字符串,他可以减少其中任何一个字符的值,例如'd'可以变成' ...

  9. 移植opencv2.4.9到android过程记录

    http://blog.csdn.net/brightming/article/details/50606463 在移植到arm开发板的时候已经说过,OpenCV已经为各平台准备了一套cmake交叉编 ...

  10. 前端之CSS进阶

    一.CSS属性操作 1.背景属性 常用: background-color 规定要使用的背景颜色 background-image 规定要使用的背景图像 background-repeat 规定如何重 ...