Empezar con ZeroC ICE en Debian

DebiannetworkingPython

En esta receta se describe cómo instalar el middleware ZeroC ICE en Debian SID y cómo ejecutar un ejemplo básico en Python.

Introducción

ZeroC ICE es un middleware orientado a objetos, es decir, ICE proporciona herramientas, APIs, y soporte de bibliotecas para construir aplicaciones cliente-servidor orientadas a objetos. La filosofía de ZeroC ICE es la construcción de una plataforma tan potente como CORBA, pero sin cometer todos los fallos de ésta y evitando una complejidad innecesaria. ICE es software libre y está liberado bajo la licencia GNU/GPL.

Instalación

Si somos usuarios de Debian y/o derivados, la instalación es muy sencilla:

# apt-get update
# apt-get install zeroc-ice33

¡Hola, mundo!

El lenguaje de especificación de interfaces de ICE es Slice, y se utiliza para definir las interfaces, las operaciones, y los tipos de datos intercambiados entre el cliente y el servidor, entre otras cosas.

El clásico ejemplo de ¡Hola, mundo! en Slice sería muy sencillo:

module Demo {
   interface HolaMundo {
     void saludar ();
   };
};

¡Hola, mundo! en Python

Cliente:

import sys, traceback, Ice
Ice.loadSlice('holaMundo.ice', ['-I' '/usr/share/slice'])
import Demo
 
class Client (Ice.Application):
    def run (self, argv):
        basePrx = self.communicator().stringToProxy('HolaMundo:default -p 10000')
        holaMundoPrx = Demo.HolaMundoPrx.checkedCast(basePrx)
        holaMundoPrx.saludar()
        return 0
 
Client().main(sys.argv)

El cliente simplemente crea un proxy a un objeto que implementa la interfaz HolaMundo y, posteriormente, invoca a la operación saludar.

Servidor:

import sys, traceback, Ice
Ice.loadSlice('../slice/HolaMundo.ice', ['-I' '/usr/share/slice'])
import Demo
 
class HolaMundoI (Demo.HolaMundo):
    def saludar (self, current = None):
        print '¡Hola Mundo!'
 
class Server (Ice.Application):
    def run (self, argv):
        self.shutdownOnInterrupt()
        adapter = self.communicator().createObjectAdapterWithEndpoints(
            'HolaMundoAdapter', 'default -p 10000')
        adapter.add(HolaMundoI(), Ice.stringToIdentity('HolaMundo'))
        adapter.activate()
        self.communicator().waitForShutdown()
        return 0
 
Server().main(sys.argv)

El servidor crea un objeto de tipo HolaMundo y lo registra en un adaptador de objetos, encargado de manejar las operaciones remotas (o locales) sobre sus objetos asociados.

Ejecución

Servidor:

$ python Server.py

Cliente:

$ python Client.py

Referencias

ZeroC

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
david.villa's picture

Por si sirve de ayuda a alguien

Aquí tenemos un repositorio con ejemplitos sencillos de ICE en distintos lenguajes:

https://arco.esi.uclm.es/svn/public/samples/ice-hello/

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.