Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Le quel de ces deux exemples Autobahn Python est obsolète ?

+4 votes

Je débute avec Python et la technologie WAMP m'a beaucoup séduite et j'ai décidé de m'y lancé
Mais au delà de la présentation et des super fonctionnalités, la documention est vraiment mal foutu.
La documentation de asyncio a 6 mois de retard sur celle de Twisted, les exemples Twisted de la documentation ne sont pas les même que ceux du depo Git..etc
Du coup je ne sais pas quel exemple prendre en exemple tellement y'en a de partout qui sont sensé faire la même chose mais qui au final sont tellement différent.

Premier exemple (http://autobahn.ws/)

from twisted.internet import reactor
from twisted.internet.defer import inlineCallbacks

from autobahn.twisted.util import sleep
from autobahn.twisted.wamp import ApplicationSession



class Component(ApplicationSession):
   """
   An application component that publishes an event every second.
   """

   def __init__(self, realm = "realm1"):
      ApplicationSession.__init__(self)
      self._realm = realm


   def onConnect(self):
      self.join(self._realm)


   @inlineCallbacks
   def onJoin(self, details):
      counter = 0
      while True:
         self.publish('com.myapp.topic1', counter)
         counter += 1
         yield sleep(1)

Deuxiéme exemple (Github Autobahn)

from twisted.internet.defer import inlineCallbacks

from autobahn.twisted.util import sleep
from autobahn.twisted.wamp import ApplicationSession



class Component(ApplicationSession):
   """
   An application component that publishes an event every second.
   """

   @inlineCallbacks
   def onJoin(self, details):
      print("session attached")
      counter = 0
      while True:
         print(".")
         self.publish('com.myapp.topic1', counter)
         counter += 1
         yield sleep(1)



if __name__ == '__main__':
   from autobahn.twisted.wamp import ApplicationRunner
   runner = ApplicationRunner("ws://127.0.0.1:8080/ws", "realm1")
   runner.run(Component)

Ces deux bouts de code sont sensé faire exactement la même chose mais sont différent et c'est un peu comme ça partout sur le projet WAMP (AutobahnX..etc)

demandé 31-Jan-2015 par Med (158 points)

hormis le fait que je plussois à mille pour cent sur le coup des exemple outdated ; je pense que le sujet n'etant pas "une question liée à un probleme" on risque ici de ne pas avoir de solution.

Il y a bien une version plus récente qu'une autre, non ?

Je me suis fait la même réflexion quand j'ai regardé aussi les exemples. Mais quand on assimile peu à peu les concepts et l'évolution du projet, on finit par s'y retrouver. Mais c'est vrai qu'il vaudrait mieux supprimer ou mettre à jour les exemples obsolètes.

Oui la doc va subir une refonte. Déjà un tuto django arrive cette semaine avec des exemples tout frais.

J'attends ton tuto avec impatience, déjà j'ai pu faire fonctionner Autobahn Asyncio avec tes explications.

1 Réponse

+6 votes
 
Meilleure réponse

Le second exemple est le bon, le premier est obsolète. Il n'est plus nécessaire de faire :

   def __init__(self, realm = "realm1"):
      ApplicationSession.__init__(self)
      self._realm = realm


   def onConnect(self):
      self.join(self._realm)

De plus, importer le reactor est maintenant inutile. Enfin, ApplicationRunner a été rajouté afin de permettre de facilement lancer une application en stand alone si one ne veut pas s'embêter à configurer le routeur.

répondu 31-Jan-2015 par Sam (5,000 points)
sélectionné 31-Jan-2015 par Med
...