The Full Wiki

Internet Communications Engine: Wikis


Note: Many of our articles have direct quotes from sources you can cite, within the Wikipedia article! This article doesn't yet, but we're working on it! See more info or our list of citable articles.


From Wikipedia, the free encyclopedia

The Internet Communications Engine, or Ice, is an object-oriented middleware that provides object-oriented Remote Procedure Call, grid computing, and Publish/subscribe functionality developed by ZeroC and dual-licensed under the GNU GPL and a proprietary license. It supports C++, Java, .NET-languages (such as C# or Visual Basic), Objective-C, Python, PHP, and Ruby[1] on most major operating systems such as Linux, Solaris, Windows and Mac OS X. A light variant of ICE runtime, called Ice-e[2], may run inside mobile phones and iPhones. As its name indicates, the middleware may be used for internet applications without the need to use the HTTP protocol and is capable of traversing firewalls unlike most other middleware.



ICE was influenced by CORBA in its design, and indeed was created by several influential CORBA developers, including Michi Henning. However, it is much smaller and less complex than CORBA. According to ZeroC's webpages[3], this is partly a result of being designed by a small group of experienced developers, instead of suffering from design by committee.

ICE Components

ICE is a set of CORBA like components that include object-oriented remote-object-invocation, replication, grid-computing, failover, load-balancing, firewall-traversals, and publish-subscribe services. To gain access to those services, applications are linked to a stub library or assembly, which is generated from a language-independent IDL-like syntax called slice.




is an object-oriented publish-and-subscribe framework that also supports federation and quality-of-service. Unlike other publish-subscribe frameworks such as TIBCOs’ Rendezvous or SmartSockets, message content consist of objects of well defined classes rather than of structured text.


is a suite of frameworks that provide object-oriented load balancing, failover, object-discovery and registry services.


facilitates the deployment of ICE based software. For example, a user who wish to deploy new functionality and/or patches to several servers may use IcePatch.


is a proxy-based service to enable communication through firewalls, thus making ICE an internet communication engine.


is a SOA-like container of executable services implemented in .dll or .so libraries. This is a lighter alternative to building entire executable for every service.


Slice is a Zeroc-proprietary file format that programmers follow to edit computer-language independent declarations and definitions of classes, interfaces, structures and enumerations. Slice definition files are used as input to the stub generating process. The stub in turn is linked to applications and servers that should communicate with one another based on interfaces and classes as declared/defined by the slice definitions.

Apart from CORBA, classes and interfaces support inheritance and abstract classes. In addition, slice provides configuration options in form of macros and attributes to direct the code generation process. An example is the directive to generate a certain STL list<double> template instead of the default, which is to generate a STL vector<double> template.

Comparisons to other major middleware


Ice also compares favorably to SOAP, the main advantages being that it's more object oriented, and offers vastly superior performance in terms of both bandwidth and processor load, because SOAP is based on HTTP and XML, which needs to be parsed, while Ice uses a binary protocol designed for high performance and low verbosity. However, Ice might not offer similar performance or compactness advantages when SOAP messages are exchanged using a more efficient transport and message encoding such as SOAP/TCP and Fast Infoset.


The Common Object Request Broker Architecture (CORBA) is a standard defined by the Object Management Group (OMG) that enables software components written in multiple computer languages and running on multiple computers to work together.

TIBCO Rendezvous/EMS

Rendezvous is an asynchronous publish/subscribe only middleware from TIBCO that provides text based messaging as well as its own proprietary name value pair format. A daemon runs at the client side and communicates with subscribing client processes through IPC pipes or TCP/IP. The daemon mediates between client processes and daemons that handle publishing servers. Those daemons support multicast as well as broadcast communication. EMS stands for Enterprise Messaging Services and is basically only an interface on top of Rendezvous and Java style messaging. EMS is thus a superset of Rendezvous with the addition of message queues.

Talarian Smartsockets

The differences to Rendezvous/EMS above are the lack of a payload format and a daemon running on the client side. Instead, a number of publish/subscribe daemons run somewhere on the network collectively called a cloud. This provides better performance and failover since the communication is split between several daemons and once a daemon run into an unavailable state, clients may automatically switch to another daemon. The cloud also catches published data and provides an interface for clients to retrieve the data. Any clients may therefore request for last published data anytime without having to wait for sources to republish the data. The latter mechanism is currently missing in ICE.


  1. ^ Retrieved on 2009-08-03.
  2. ^ Retrieved on 2009-08-03.
  3. ^ Retrieved 2009-08-03.

External links


Got something to say? Make a comment.
Your name
Your email address