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(), self.communicator().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


blog comments powered by Disqus