Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
D-BUS
Carlos Garcia Campos
[email protected]
Vilanova i la Geltrú
24 de junio de 2006
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
Que es D-BUS?
◮ Sistema de paso de mensajes que permite a las aplicaciones
comunicarse entre ellas de una manera simple
◮ Mecanismo IPC (Inter-Process Comunication)
◮ Diseñado para cubrir dos casos de uso bien definidos:
◮ Un bus de sistema: para la comunicación entre el sistema y las
diferentes sesiones de usuario. Por ejemplo, notificaciones de
cambios en el hardware.
◮ Un bus de sesión: para la comunicación entre aplicaciones de
escritorio.
◮ D-BUS ha sido diseñado por y para el escritorio
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
Arquitectura D-BUS
◮ D-BUS está dividido fundamentalmente en 3 capas
◮ La librería libdbus: proporciona un API para que dos
aplicaciones se comuniquen entre si intercambiando mensajes.
Las comunicaciones son siempre 1 a 1.
◮ El bus de mensajes: es un demonio creado sobre libdbus al que
las aplicaciones pueden conectar. Es el encargado de
administrar los mensajes, redirigiéndolos al destinatario o
destinatarios.
◮ Bindings: proporcionan un API de mas alto nivel que libdbus
para distintos lenguajes de programación o frameworks de
desarrollo abstrayendo al programador de los detalles de bajo
nivel. Actualmente existen bindings para GLib/GObject, Qt,
Python, Perl, Mono/C# y Java, aunque no todos ellos están
incluidos de forma oficial en el paquete D-BUS.
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
Objetos
◮ Cuando una aplicación envía mensajes a otra lo hace siempre
a un objeto concreto, no a toda la aplicación
◮ Las aplicaciones D-BUS tendrán siempre al menos un objeto
◮ Son referenciados a través de un path (de forma similar a un
fichero en un sistema de ficheros)
◮ Path en D-BUS equivale a puntero o referencia en POO.
◮ Los objetos son instancias, no tipos
◮ Podemos invocar métodos sobre los objetos
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
Métodos y señales
◮ Son tipos de mensajes que pueden viajar por el bus.
◮ Invocar un método implica enviarle un mensaje de tipo
método al objeto.
◮ Las señales son mensajes que normalmente no tienen
destinatario. El bus redigirá estos mensajes todos los clientes
conectados.
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
Métodos y señales
◮ Por el bus de mensajes solo pueden circular 4 tipos de
mensajes:
◮ Llamadas a métodos
◮ Retorno de métodos
◮ Mensaje de error (excepciones)
◮ Señales
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
Interfaces
◮ Qué métodos pueden ser invocados sobre cada objeto viene
definido por su interfaz.
◮ Un objeto puede implementar varias interfaces
◮ Las interfaces si que representan el tipo de un objeto
◮ Se representan en forma de nombre de dominio inverso.
org.freedesktop.InterfaceName
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
Servicios
◮ Objetos, mensajes e interfaces se encuentran al nivel de la
primera capa de la arquitectura (libdbus)
◮ Los servicios se encuentran al nivel de la segunda capa (el bus
de mensajes)
◮ No son mas que un nombre conocido en un bus de mensajes.
El bus de mensajes no sabe en realidad nada de servicios, sino
de nombres que identifican clientes
◮ Un servicio es un conjunto de interfaces proporcionado por
una aplicación bajo un nombre. Una aplicación puede proveer
uno o mas servicios.
◮ Cuando una aplicación quiere publicar un servicio se conecta
al bus de mensajes proporcionando un nombre de servicio que
será el que usen los clientes para poder usar los objetos del
servicio.
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
Servicios
◮ Un servicio, no existe como tal, es solo una forma de llamar a
una aplicación que ofrece cierta funcionalidad a través de un
nombre
◮ Este nombre se especifica igual que las interfaces, a través del
sistema de nombres de dominio inverso.
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
El servicio calculadora
◮ En función de lo visto hasta ahora, podríamos convertir la
calculadora de GNOME en un servicio D-BUS proporcionando:
◮ Un nombre de servicio: org.gnome.utils.Calculator
◮ Una interfaz (al menos): org.gnome.utils.Calculator
◮ Los métodos de la interfaz: org.gnome.utils.Calculator.Add,
org.gnome.utils.Calculator.Substract, etc.
◮ Un objeto (al menos): /org/gnome/utils/Calculator
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
El bus de mensajes
◮ Es la segunda de la arquitectura construida sobre libdbus
◮ libdbus proporciona una comunicación 1 a 1, lo cual no parece
muy últil si queremos mantener varias aplicaciones
comunicadas entre si o realizar una notificación a todas las
aplicaciones del ecritorio
◮ El bus de mensajes es en realidad un servicio mas, es decir, es
uno de los participantes en la comunicación 1 a 1.
◮ Cada una de las aplicaciones o servicios completan de forma
independiente el segundo participante de la comunicación.
◮ Cuando una aplicación quiere comunicarse con otra, lo que
hace es enviarle sus mensajes al bus de mensajes y éste
reenviará dichos mensajes al destinatario correspondiente
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
El bus de mensajes
◮ Cuando un cliente se conecta al bus de mensajes éste genera
un nombre especial para él llamado nombre de conexión único
◮ Estos nombres especiales empiezan siempre por ’:’ y son
creados dinámicamente de forma que nunca se repiten en una
misma sesión del bus de mensajes (:1.3)
◮ Además del nombre único las aplicaciones pueden pedir al bus
de mensajes un nombre bien conocido o nombre de servicio.
Por ejemplo org.gnome.utils.Calculator
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
Cliente y servidor
◮ La comunicación 1 a 1 ofrecida por libdbus sigue el modelo
tradicional cliente-servidor.
◮ Servidor: permanecerá la espera de conexiones
◮ Cliente: conecte al servidor
◮ Una vez establecida la conexión comienza una comunicación
bidireccional de igual a igual, y libdbus ya no
diferenciará entre cliente y servidor.
◮ Como en toda comunicación cliente-servidor, ambos deben
ponerse de acuerdo en donde escuchará el servidor para que el
cliente pueda conectar. En D-BUS se conoce como dirección
D-BUS y por defecto es un socket unix.
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
Cliente y servidor
◮ El bus de mensajes es quién juega el papel del servidor y todas
las demás aplicaciones que conectan al bus son clientes
◮ Para que las aplicaciones no tengan que ponerse de acuerdo
con el bus de mensajes en cuanto a la dirección D-BUS, el bus
de mensajes exporta en una variable de entorno dicha
dirección.
◮ Libdbus consulta esa variable cuando un cliente trata de
conectar a un servidor
◮ Servicio != Servidor
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
El servicio org.freedesktop.DBus
◮ Las aplicaciones pueden conectar al bus de mensajes para
comunicarse con otras, pero también para interactuar con el
propio bus de mensajes.
◮ Este tipo de interacciones con el bus de mensajes se realiza a
través del servicio org.freedesktop.DBus ofrecido por el propio
bus
◮ El servicio org.freedesktop.DBus ofrece un objeto
/org/freedesktop/DBus que implementa la interfaz
org.freedesktop.DBus
Carlos Garcia Campos
[email protected]
D-BUS
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones
Ejemplo: ListNames
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import dbus
# Primero conectamos al bus de mensajes de sesión
bus = dbus.SessionBus ()
# Obtenemos el objeto /org/freedesktop/DBus
# proporcionado por el servicio org.freedesktop.DBus
remote_object = bus.get_object (‘‘org.freedesktop.DBus’’,
‘‘/org/freedesktop/DBus’’)
# Puesto que un objeto puede implementar varias
# interfaces, seleccionamos la interfaz a través de la
# cual vamos a interactuar con el objeto, es decir, la
# que ofrece el metodo ListNames en este caso
iface = dbus.Interface (remote_object, ‘‘org.freedesktop.DBus’’)
# Ahora invocamos el metodo ListNames para obtener la lista de
Comentarios de: d-bus (0)
No hay comentarios