Discussion:
[Python-es] Autobahn
unknown
2014-09-01 14:10:21 UTC
Permalink
Buenas, estoy con una consulta de una libreria, Autobahn.

Estoy tratando de utilizar los ejemplos de la docu para generar una
conexion a un ws server y generar eventos.

La docu esta aca: http://autobahn.ws/python/wamp/programming.html

mi problema viene a que no estoy comprendiendo bien como utilizan la
libreria, ya que generar una conexion (un runner) y le pasan como parametro
un componente, pero no llego a comprender como ejecutar ese componete, les
copio un ejemplo:

from autobahn.twisted.wamp import ApplicationRunner
from autobahn.twisted.wamp import ApplicationSession
from twisted.internet.defer import inlineCallbacks


class MyComponent(ApplicationSession):
@inlineCallbacks
def onJoin(self):
print("session ready")
def oncounter(count):
print("event received: {0}", count)
try:
yield self.subscribe(oncounter, 'camal1')
print("subscribed to topic")
except Exception as e:
print("could not subscribe to topic: {0}".format(e))

runner = ApplicationRunner(url = "ws://172.16.45.78:5052", realm = "realm")
runner.run(MyComponent)


Osea, no entiendo como trabaja el "componente", ya que onjoin se deveria
ejecutar, pero no se como :P

Agradezco la ayuda.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140901/9e903d87/attachment.html>
unknown
2014-09-09 10:41:23 UTC
Permalink
El 1 de septiembre de 2014, 16:10, Nicolas lino <nicolaslino1 en gmail.com>
Post by unknown
Buenas, estoy con una consulta de una libreria, Autobahn.
Estoy tratando de utilizar los ejemplos de la docu para generar una
conexion a un ws server y generar eventos.
La docu esta aca: http://autobahn.ws/python/wamp/programming.html
mi problema viene a que no estoy comprendiendo bien como utilizan la
libreria, ya que generar una conexion (un runner) y le pasan como parametro
un componente, pero no llego a comprender como ejecutar ese componete, les
El "runner" es quien asocia el componente al router WAMP y ejecuta el
componente. Para crear un componente basta con derivar una clase de
"ApplicationSession", de la que tienes dos tipos: twisted y asyncio.

Lo que creo que te confunde es cuando se registran los componentes para ser
llamados remotamente. Se usa para ello "decoradores de clase", que es uno
de los modos de inyectar dependencias que tiene python. Estos decoradores
pueden ser "*inlineCallbacks*" o "*coroutine*", según si se trata de
componentes "*twisted*" o "*asyncio*", respectivamente.

En tu código, tienes mal puesto el decorador, como si fuera de función en
lugar de ser un decorador de clase. Debe estar en la linea anterior a la
definición de la clase:

@inlineCallbacks
class MyComponent(ApplicationSession):
def onJoin(self):
...

Este decorador de clase hace toda la "magia" de modo que solo te tengas que
preocupar de escribir el método *onJoin* para que el componente funcione.


Saludos,
--
Hyperreals *R "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
Buscador Python Hispano: http://ch3m4.org/python-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140909/99a17a25/attachment.html>
Loading...