ICE通信简介

简介:

参考《Ice分布式程序设计马维达 译

一、简介

    Ice 是一种针对客户端和服务器进行通信的面向对象的中间件平台。Ice 为构建面向对象的客户-服务器应用提供了工具、API 和库支持。客户和服务器通信双方可以用不同的编程语言编写,目前最新的版本支持的语言包括C++.NETJavaPythonObjective-CRubyPHP and ActionScript客户和服务器可以分别部署可以运行在不同的操作系统和机器架构

    Ice 核心为远地通信提供了客户端和服务器端运行时支持。其中的大量代码所涉及的是网络通信、线程、字节序,以及其他许多与网络有关的问题,我们应用代码应该与这些问题隔离开来。

    Ice 提供了一种RPC 协议,既可以把TCP/IP、也可以把UDP 用作底层传输机制。客户和服务器代码都不需要了解底层的传输机制(你可以通过一个配置参数选择所需的传输机制)。

    Ice 还允许你把SSL 用作传输机制,让客户与服务器间的所有通信都进行加密。通过SSL 强加密,可以使客户和服务器完全安全地进行通信,这样,应用可以使用不安全的网络安全地进行通信。

    Ice 提供了同步和异步的操作调用和分派。

   客户端采用异步方法调用,可以不需要等到服务器做出答复,Ice run time 等待答复的同时,客户端发出调用的线程不会阻塞。发出调用的线程可以继续进行各种活动,当答复最终到达时, Ice run time 会通知应用

   服务器可以采用异步方法分配,一个服务器在同一时刻所能支持的同步请求数受到Ice run time 的服务器线程池的尺寸限制。如果所有线程都在忙于分派长时间运行的操作,那么就没有线程可用于处理客户端发送过来的新的请求,客户端就会出现不可接受的无响应状态

   在使用异步方法分配时,服务器可以接收一个请求,然后先将此请求放入任务池中,让其他的线程处理,以尽快释放分派线程。当处理结果已得出时,服务器要使用Ice run

time 提供的回调对象,显式地发送响应到客户端,告知客户端请求处理的结果

二、Ice 服务

    Ice 核心为分布式应用开发提供了一个完善的客户-服务器平台。但现实应用需要的常常不止是远地通信能力:你通常还需要拥有这样的能力:随需启动服务器、把代理分发给客户、分发异步事件、配置你的应用、分发应用补丁,等等。

   在Ice 中有一些服务, 能够提供上述特性及其他一些特性。

1. IcePack

    IcePack Ice 的定位服务,用于在使用间接绑定时把符号性的适配器名解析为协议-地址对。 也就是说应用程序中只需要提供字符串(一个对象的标示符),将此字符串在ICE中注册就行了,不需要将通信的IP、端口等信息硬编码在程序代码中,或者说在配置文件中手动指定IP和端口信息。客户端和服务器通信时,客户端就可以使用字符串先到注册的映射表中查询出相应的IP和端口等信息,再进行通信。

1.服务器在启动时,服务器向定位器注册它的对象和对象适配器。

2.在创建使用间接绑定的代理时,客户端的Ice run time 调用定位器上的方法,获取与某个对象标识或对象适配器标识符相关联的端点。

3.在为代理获取了端点之后,客户直接建立一个通向服务器的连接。客户不会再次询问定位器,除非发生连接错误。

    除了这样的定位服务, IcePack 还提供了其他特性:

  • IcePack  允许你注册服务器,进行自动启动:当客户发出请求时,服务器无需在运行,  IcePack  会在第一个客户请求到达时,随需启动服务器。
  • IcePack  支持部署描述符,能让你轻松地配置含有若干服务器的复杂应用。
  • IcePack  提供了一种简单的对象查找服务,客户可用来获取它们感兴趣的对象的代理。

2. IceBox

    IceBox 是一种简单的应用服务器,可用于协调许多服务的启动和停止。一个通用的IceBox 服务器取代了你通常编写的整体式Ice 服务器。你通过属性为IceBox 服务配置它负责加载和管理的应用特有的服务,并且可以对它进行远地管理。

要把自己编写的服务配置进IceBox 服务器中,只需使用一个属性。下面是这个属性的格式:

    IceBox.Service.name=entry_point [args]

    name 部分是服务名entry_point指出服务具体的类路径,args指出开启服务是需要的一些参数。

3. IceStorm

    IceStorm 是一种发布-订阅服务,能够解除客户与服务器的耦合。在本质上, IceStorm 充当的是事件分发交换机。发布者把事件发给这个IceStorm服务,由它发给订阅者。这样,发布者发布的单个事件就可以发送给多个订阅者。事件按照主题进行分类,订阅者会指定它们感兴趣的主题。只有那些与订阅者感兴趣的主题相吻合的主题才会发给这个订阅者。这个服务允许你指定服务质量标准, 让应用在可靠性和性能之间进行适当的折衷。

    如果你需要把信息分发给大量应用组件, IceStorm 就会特别有用(一个典型的例子是,拥有大量订阅者的证券报价应用)。IceStorm 能解除信息的发布者与订阅者的耦合,并负责重新分发已发布的信息。此外,IceStorm还可以作为联盟服务运行,也就是说,服务的多个实例可以在不同的机器上运行,使处理负载分摊到许多CPU 上。

    应用常常需要把信息分发给多个接收者。例如,假定我们在开发一个气候监测应用,用于收集来自气象塔的观测数据,比如风速和温度,并把它们周期性地发布给气候监视站。我们一开始考虑使用图中的架构。

    但这种构架有一个很大的缺点,它把收集器及其监视器紧密地耦合在一起,要求收集器实现去管理监视器的注册细节、观测数据递送,以及出错恢复,从而变得无谓的复杂化。如图所示,我们可以把IceStorm 结合进我们的应用中,使我们摆脱这些琐碎的工作。

  

    IceStorm 使收集器与监视器解除耦合,极大地简化了收集器实现。作为发布订阅服务,IceStorm 充当的是收集器发布者与监视器订阅者)之间的“中间人”,它提供了若干好处:

  • 当收集器准备好分发一组新的观测数据时,它会向 IceStorm  服务器发出一个请求。 IceStorm  服务器会负责把请求递送给监视器,包括处理由于订阅者的行为有问题或订阅者不存在所造成的异常。收集器不再需要关注它的监视器,甚至不需要知道此时是否有监视器。
  • 与此类似,监视器会与 IceStorm  服务器交互,完成像订阅和取消订阅这 样的任务,从而让收集器专注于它自己的应用特有的职责,而不是管理上的琐事。
  •   要把 IceStorm  结合进来,收集器和监视器应用所需做出的改动非常少。

4. IcePatch

    IcePatch 是一种软件修补服务。 你可以用它来轻松地把软件更新分发给客户。客户可以简单地连接到IcePatch,请求获得特定应用的更新。这个服务会自动检查客户的软件的版本,并以一种压缩形式下载任何更新过的应用组件,从而节省带宽。你可以用Glacier 服务来保护软件补丁,只让得到授权的客户下载软件补丁。

5. Glacier

    Glacier Ice 防火墙服务:它能让客户与服务器通过防火墙安全地进行通信,且又不牺牲安全性。 客户-服务器之间的通信数据使用公钥证书进行了完全的加密,并且是双向的。Glacier 支持相互认证,以及安全的会话管理。

6. Freeze

    Ice 拥有内建的对象持久服务,叫作FreezeFreeze 能够让我们轻松地在数据库中存储对象状态Freeze 使用Berkeley DB作为它的缺省数据库。也可以使用其他的数据库。Ice 还提供了一些工具,能让我们更轻松地管理数据库

7. IceSSL 

    无论是在企业内部网中,还是在像Internet 这样的非受信网络上,安全性对于许多分布式应用而言,都是一个重要的考虑事项。保护敏感信息、确保其完整性、检验各通信方的标识,这些能力对开发安全的应用而言必不可少。考虑到这些目标, Ice 提供了IceSSL 插件,能够通过SSL协议提供这些能力。

目录
相关文章
|
3月前
|
Java 关系型数据库 MySQL
规则引擎 ice
规则引擎 ice
87 0
|
4月前
|
监控 网络协议 物联网
一款轻量级的通信协议---MQTT (内含Linux环境搭建)
**MQTT协议摘要** MQTT是一种轻量级的发布/订阅型网络协议,适用于低带宽、高延迟或不可靠的网络环境,尤其适合物联网(IoT)设备。其主要特点包括: 1. **发布/订阅模型**:设备通过主题进行通信,发布者无需知道订阅者,订阅者也不需知道消息来源。 2. **轻量级**:协议头部小,减少网络负载,适合资源受限的设备。 3. **断线重连**:支持客户端在失去连接后重新连接,保持通信。 4. **服务质量级别(QoS)**:提供0(最多一次)、1(至少一次)和2(恰好一次)三种级别,保证消息传递的可靠性。
|
6月前
|
存储 芯片 异构计算
|
网络协议 Linux 网络性能优化
QT5网络与通信
在应用程序开发中网络编程非常重要,目前互联网通行的TCP/IP协议,自上 而下分为应用层、传输层、网际层和网络接口层这四层。实际编写网络应用程序时 只使用到传输层和应用层,所涉及的协议主要包括UDP、TCP、FTP和HTTP等。
131 0
|
传感器 消息中间件 网络协议
ESP32-C3入门教程 网络 篇(三、 MQTT 协议基础介绍及测试)
在前面,我们已经学会了 ESP32-C3 的WiFi 配置以及使用,为我们学习网络协议建立了基础。 这篇文章我们就来学习测试一下ESP32-C3 的 MQTT 驱动。
945 1
ESP32-C3入门教程 网络 篇(三、 MQTT 协议基础介绍及测试)
|
传感器 算法 Ubuntu
STM32通过rosserial接入ROS通讯开发
STM32通过rosserial接入ROS通讯开发
337 0
STM32通过rosserial接入ROS通讯开发
|
缓存 负载均衡 网络协议
[译]Linux平台Intel以太网控制器x710/xl710性能调优指南
介绍如何在Linux平台对intel x710/xl710进行性能调优
3073 0
|
算法 网络协议 Unix
QT应用编程: windows下使用UDT传输协议_创建工程示例(高速数据传输)
QT应用编程: windows下使用UDT传输协议_创建工程示例(高速数据传输)
499 0
QT应用编程: windows下使用UDT传输协议_创建工程示例(高速数据传输)
|
Java 中间件 ice
【通信中间件】电信级解决方案中间件ICE编程入门指南
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/   0.ICE介绍:ICE(Internet Communications Engine)是ZeroC提供的一款高性能的中间件,基于ICE可以实现电信级的解决方案。
1072 10
|
缓存 网络协议 C#
[连载]《C#通讯(串口和网络)框架的设计与实现》- 5.串口和网络统一IO设计
目       录 第五章           串口和网络统一IO设计... 2 5.1           统一IO接口... 2 5.1.1    串口IO.. 4 5.1.2    网络IO.
1580 0