Pyro
                  Aluno: Diógenes A. Fernandes Hermínio

Tuesday, October 19, 2010
O que é?

                   PYthon Remote Objects

                   100% escrito em Python

                   Open Source (Licença MIT)

                   Modelo Cliente-Servidor

                   Conversa em arquiteturas 32-bit e 64-bit



Tuesday, October 19, 2010
NameServer
                   Banco de dados central

                   Usa um script para rodar (pyro-ns)




             DIOGENES-HERMINIOS-MACBOOK:RENT_A_CAR DIOFEHER$ PYRO-NS
             *** PYRO NAME SERVER ***




Tuesday, October 19, 2010
Server

                   Iniciar o servidor

                   Encontrar o NameServer

                   Instanciar o daemon

                   Setar um NameServer

                   Iniciar o main loop do daemon



Tuesday, October 19, 2010
Programa Server
                            CORE.INITSERVER()

                            DAEMON = CORE.DAEMON()

                            NS = NAMING.NAMESERVERLOCATOR().GETNS()

                            DAEMON.USENAMESERVER(NS)

                            DAEMON.REQUESTLOOP()




Tuesday, October 19, 2010
Instanciando um objeto
                  CLASS MANAGER(OBJECT):
                    ... CODE ...




                      OBJ = CORE.OBJBASE()

                      OBJ.DELEGATETO(MANAGER())

                      DAEMON.CONNECT(OBJ, 'OBJ')



Tuesday, October 19, 2010
Instanciando um objeto
                  CLASS MANAGER(CORE.OBJBASE):
                    ... CODE ...




                       OBJ = MANAGER()

                       DAEMON.CONNECT(OBJ, 'OBJ')




Tuesday, October 19, 2010
Cliente

                 Código de inicialização

                 Encontrar o URI = NameServer + nome do objeto

                 Usar o URI para chamar o objeto proxy




Tuesday, October 19, 2010
Código - Cliente
             CORE.INITSERVER()
             LOCATOR = NAMING.NAMESERVERLOCATOR()
             SELF.NS = LOCATOR.GETNS()

             URI = SELF.NS.RESOLVE('NOME_OBJETO')
             OBJ = CORE.GETATTRPROXYFORURI(MANAGER_URI)




Tuesday, October 19, 2010
Protocolo de
                  comunicação

                   Transporte é feito com TCP/IP

                   Usa o Procolo PYRO, mas pode usar outros.

                   Baseado em pickle

                   Por isso só é possível passar objetos “pickeables”




Tuesday, October 19, 2010
Exceções

                   O cliente deve implementar tratamento de
                   exceções

                   Elas são lançadas como se objetos realmente
                   fossem locais

                   Podem ocorrer exceções que não fazem parte dos
                   objetos, como a rede ter caído




Tuesday, October 19, 2010
Logging


                   Pyro faz o log de todas as exceções que ocorrem

                   Timestamp + traceback

                   Desligado por default




Tuesday, October 19, 2010

Pyro vs RMI

  • 1.
    Pyro Aluno: Diógenes A. Fernandes Hermínio Tuesday, October 19, 2010
  • 2.
    O que é? PYthon Remote Objects 100% escrito em Python Open Source (Licença MIT) Modelo Cliente-Servidor Conversa em arquiteturas 32-bit e 64-bit Tuesday, October 19, 2010
  • 3.
    NameServer Banco de dados central Usa um script para rodar (pyro-ns) DIOGENES-HERMINIOS-MACBOOK:RENT_A_CAR DIOFEHER$ PYRO-NS *** PYRO NAME SERVER *** Tuesday, October 19, 2010
  • 4.
    Server Iniciar o servidor Encontrar o NameServer Instanciar o daemon Setar um NameServer Iniciar o main loop do daemon Tuesday, October 19, 2010
  • 5.
    Programa Server CORE.INITSERVER() DAEMON = CORE.DAEMON() NS = NAMING.NAMESERVERLOCATOR().GETNS() DAEMON.USENAMESERVER(NS) DAEMON.REQUESTLOOP() Tuesday, October 19, 2010
  • 6.
    Instanciando um objeto CLASS MANAGER(OBJECT): ... CODE ... OBJ = CORE.OBJBASE() OBJ.DELEGATETO(MANAGER()) DAEMON.CONNECT(OBJ, 'OBJ') Tuesday, October 19, 2010
  • 7.
    Instanciando um objeto CLASS MANAGER(CORE.OBJBASE): ... CODE ... OBJ = MANAGER() DAEMON.CONNECT(OBJ, 'OBJ') Tuesday, October 19, 2010
  • 8.
    Cliente Código de inicialização Encontrar o URI = NameServer + nome do objeto Usar o URI para chamar o objeto proxy Tuesday, October 19, 2010
  • 9.
    Código - Cliente CORE.INITSERVER() LOCATOR = NAMING.NAMESERVERLOCATOR() SELF.NS = LOCATOR.GETNS() URI = SELF.NS.RESOLVE('NOME_OBJETO') OBJ = CORE.GETATTRPROXYFORURI(MANAGER_URI) Tuesday, October 19, 2010
  • 10.
    Protocolo de comunicação Transporte é feito com TCP/IP Usa o Procolo PYRO, mas pode usar outros. Baseado em pickle Por isso só é possível passar objetos “pickeables” Tuesday, October 19, 2010
  • 11.
    Exceções O cliente deve implementar tratamento de exceções Elas são lançadas como se objetos realmente fossem locais Podem ocorrer exceções que não fazem parte dos objetos, como a rede ter caído Tuesday, October 19, 2010
  • 12.
    Logging Pyro faz o log de todas as exceções que ocorrem Timestamp + traceback Desligado por default Tuesday, October 19, 2010