The main entry point to the Ice run time is represented by the local Slice interface Ice::Communicator. An instance of Ice::Communicator is associated with a number of run-time resources:

Object adapters and objects that use different communicators are completely independent from each other. Specifically:

Typically, servers use only a single communicator but, occasionally, multiple communicators can be useful. For example, IceBox, uses a separate communicator for each Ice service it loads to ensure that different services cannot interfere with each other. Multiple communicators are also useful to avoid thread starvation: if one service runs out of threads, this leaves the remaining services unaffected.


The communicator's interface is defined in Slice. Part of this local interface looks as follows:

module Ice 
{
    ["clr:implements:_System.IDisposable", "java:implements:java.lang.AutoCloseable", "php:internal"]
    local interface Communicator
    {
        string proxyToString(Object* obj);
        Object* stringToProxy(string str);
        PropertyDict proxyToProperty(Object* proxy, string property);
        Object* propertyToProxy(string property);
        string identityToString(Identity id);
        ObjectAdapter createObjectAdapter(string name);
        ObjectAdapter createObjectAdapterWithEndpoints(string name, string endpoints);
        ObjectAdapter createObjectAdapterWithRouter(string name, Router* rtr);
        void shutdown();
        void waitForShutdown();
        bool isShutdown();
        ["cpp:noexcept"] void destroy();
        // ...
    }
}

The communicator offers a number of operations:

See Also