Outils pour utilisateurs

Outils du site


perspective_broker

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
perspective_broker [2018/10/18 12:57] – [Introduction Perspective Broker] sergeperspective_broker [2022/12/05 15:51] (Version actuelle) – [Python: Twisted Perspective Broker] serge
Ligne 2: Ligne 2:
  
 <WRAP center round info centeralign 60%> <WRAP center round info centeralign 60%>
-**Niveau Pro et intergalactique !**+**Niveau Pro et intergalactique !**\\ 
 +Cette API: 
 +  * a entre 15 et 20 ans 
 +  * n'est que vaguement maintenu 
 +  * un exemple au moins ne marche pas 
 +  * le tranfert de datas simples marche 
 +  * le transfert d'objets complexes ne marche pas 
 +  * les exemples ne respectent pas le PEP 8, c'est imbriqué au possible
 </WRAP> </WRAP>
 +
 +<WRAP center round box 60% >
 +  * **{{tagpage>perspectivebroker|Toutes les pages Twisted Perspective Broker}}**
 +  * **[[using_perspective_broker|Page suivante]]** Using Perspective Broker
 +  * **[[https://github.com/sergeLabo/PB|Les fichiers sources]]**
 +</WRAP>
 +
 +**Traduction Google de [[https://twistedmatrix.com/documents/current/core/howto/pb-intro.html|Introduction to Perspective Broker]] améliorée par un humain ayant fait intergalactique en 1ère langue !**
  
 =====Introduction Perspective Broker===== =====Introduction Perspective Broker=====
-Traduction Google de **[[https://twistedmatrix.com/documents/current/core/howto/pb-intro.html|Introduction to Perspective Broker]]** améliorée par un humain !+**La page suivante est [[using_perspective_broker|Using Perspective Broker]]**
  
 ====Introduction==== ====Introduction====
  
-Supposons que vous vous retrouviez dans le contrôle des deux extrémités du fil: vous avez deux programmes qui doivent se parler et vous pouvez utiliser n'importe quel protocole. Si vous pouvez penser à votre problème en termes d'objets nécessitant des appels de méthode, il est alors probable que vous puissiez utiliser le protocole Perspective Broker de Twisted plutôt que d'essayer d'intégrer vos besoins dans HTTP, ou encore d'implémenter un autre RPC. mécanisme.+Supposons que vous vous retrouviez dans le contrôle des deux extrémités du fil: vous avez deux programmes qui doivent se parler et vous pouvez utiliser n'importe quel protocole. Si vous pouvez penser à votre problème en termes d'objets nécessitant des appels de méthode, il est alors probable que vous puissiez utiliser le protocole Perspective Broker de Twisted plutôt que d'essayer d'intégrer vos besoins dans HTTP, ou encore d'implémenter un autre mécanisme RPC.
  
 Le système Perspective Broker (en abrégé «PB») repose sur quelques concepts centraux: Le système Perspective Broker (en abrégé «PB») repose sur quelques concepts centraux:
   * serialization = sérialisation : prendre des objets et des types assez arbitraires, les transformer en un bloc d'octets, les envoyer sur un fil, puis les reconstituer à l'autre extrémité. En surveillant attentivement les identifiants d'objet, les objets sérialisés peuvent contenir des références à d'autres objets et la copie distante sera toujours utile.   * serialization = sérialisation : prendre des objets et des types assez arbitraires, les transformer en un bloc d'octets, les envoyer sur un fil, puis les reconstituer à l'autre extrémité. En surveillant attentivement les identifiants d'objet, les objets sérialisés peuvent contenir des références à d'autres objets et la copie distante sera toujours utile.
-  * remote method calls = ppels de méthode distants  : faire quelque chose sur un objet local et provoquer l'exécution d'une méthode distante. L'objet local est appelé [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.RemoteReference.html|RemoteReference]] et vous «faites quelque chose» en exécutant sa méthode .callRemote . +  * remote method calls = appels de méthodes distantes  : faire quelque chose sur un objet local et provoquer l'exécution d'une méthode distante. L'objet local est appelé [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.RemoteReference.html|RemoteReference]] et vous «faites quelque chose» en exécutant sa méthode .callRemote . 
  
-Ce document contiendra plusieurs exemples qui sembleront redondants et verbeux une fois que vous aurez compris ce qui se passe. Pour commencer, une grande partie du code sera simplement étiquetée «magic»: ne vous inquiétez pas du fonctionnement de ces pièces. Il sera expliqué plus en détail plus tard.+Ce document contiendra plusieurs exemples qui sembleront redondants et verbeux une fois que vous aurez compris ce qui se passe. Pour commencer, une grande partie du code sera simplement étiquetée «magic»: il n'est pas nécessaire de comprendre; il sera expliqué plus en détail plus tard.
  
 ====Feuille de route de l'objet==== ====Feuille de route de l'objet====
Ligne 37: Ligne 52:
  
 ====Sous-classement et mise en œuvre==== ====Sous-classement et mise en œuvre====
 +<code python>
 +class A:
 +    pass
 +class B(A):
 +    pass
 +</code>  
 +
 +**Si une class B hérite d'une autre class A, B est une sous class de A.**
  
-Techniquement, vous pouvez sous-classer tout ce que vous voulez, mais techniquement, vous pouvez aussi écrire un tout nouveau framework, ce qui vous fera perdre beaucoup de temps. Connaître les classes utiles à la sous-classe ou les interfaces à implémenter est l'une des connaissances essentielles à la réussite de l'utilisation de PB (et de Twisted). Voici quelques conseils pour commencer:+Techniquement, vous pouvez sousclasser tout ce que vous voulez, mais techniquement, vous pouvez aussi écrire un tout nouveau framework, ce qui vous fera perdre beaucoup de temps. Connaître les classes utiles à la sous-classe ou les interfaces à implémenter est l'une des connaissances essentielles à la réussite de l'utilisation de PB (et de Twisted). Voici quelques conseils pour commencer:
  
-  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Referenceable.html|pb.Root]] , [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Referenceable.html|pb.Referenceable]] : vous les sous- classez pour créer des objets à distance référençable (c.-à-d. des objets sur lesquels vous pouvez appeler des méthodes à distance) en utilisant PB. Vous n'avez pas besoin de modifier le comportement existant, il vous suffit d'en hériter et d'ajouter les méthodes accessibles à distance que vous souhaitez exporter. +  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Referenceable.html|pb.Root]] , [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Referenceable.html|pb.Referenceable]] : vous les sousclassez pour créer des objets à distance référençables (c.-à-d. des objets sur lesquels vous pouvez appeler des méthodes à distance) en utilisant PB. Vous n'avez pas besoin de modifier le comportement existant, il vous suffit d'en hériter et d'ajouter les méthodes accessibles à distance que vous souhaitez exporter. 
-  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Avatar.html|pb.Avatar]] : Vous serez en train de sous - classer cela lorsque vous entrerez dans la programmation PB avec autorisation. Ceci est un implémenteur de IPerspective.+  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Avatar.html|pb.Avatar]] : Vous serez en train de sousclasser cela lorsque vous entrerez dans la programmation PB avec autorisation. Ceci est un implémenteur de IPerspective.
   * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.cred.checkers.ICredentialsChecker.html|ICredentialsChecker]] : Implémentez ceci si vous souhaitez authentifier vos utilisateurs contre une sorte de magasin de données: par exemple, une base de données LDAP, un SGBDR, etc. Il existe déjà quelques implémentations pour différents back-end dans twisted.cred.checkers.    * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.cred.checkers.ICredentialsChecker.html|ICredentialsChecker]] : Implémentez ceci si vous souhaitez authentifier vos utilisateurs contre une sorte de magasin de données: par exemple, une base de données LDAP, un SGBDR, etc. Il existe déjà quelques implémentations pour différents back-end dans twisted.cred.checkers. 
  
Ligne 108: Ligne 131:
 Enfin, lorsque toutes les références à un [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Cacheable.html|Cacheable]] depuis une perspective donnée sont perdues, stoppedObserving(perspective, observer) sera appelé sur  [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Cacheable.html|Cacheable]], avec la même paire perspective / observateur avec laquelle getStateToCacheAndObserveFor a été initialement appelé. Tous les appels distants de nettoyage peuvent être effectués à cet endroit, tout comme la suppression de l'objet observateur de toutes les listes dans lesquelles il se trouvait auparavant. Tout appel supplémentaire à cet objet observateur sera invalide.  Enfin, lorsque toutes les références à un [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Cacheable.html|Cacheable]] depuis une perspective donnée sont perdues, stoppedObserving(perspective, observer) sera appelé sur  [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Cacheable.html|Cacheable]], avec la même paire perspective / observateur avec laquelle getStateToCacheAndObserveFor a été initialement appelé. Tous les appels distants de nettoyage peuvent être effectués à cet endroit, tout comme la suppression de l'objet observateur de toutes les listes dans lesquelles il se trouvait auparavant. Tout appel supplémentaire à cet objet observateur sera invalide. 
  
-=====Des exemples===== +**La page suivante est [[using_perspective_broker|Using Perspective Broker]]**
-Bon là, je ne comprends pas, c'est de l'intergalactique! +
- +
-====Exemple 1==== +
-<file python pb1client.py> +
-#!/usr/bin/env python3 +
- +
-# Copyright (c) Twisted Matrix Laboratories. +
-# See LICENSE for details. +
- +
- +
-from twisted.spread import pb +
-from twisted.internet import reactor +
- +
-def main(): +
-    factory = pb.PBClientFactory() +
-    reactor.connectTCP("localhost", 8800, factory) +
-    def1 = factory.getRootObject() +
-    def1.addCallbacks(got_obj1, err_obj1) +
-    reactor.run() +
- +
-def err_obj1(reason): +
-    print("error getting first object", reason) +
-    reactor.stop() +
- +
-def got_obj1(obj1): +
-    print("got first object:", obj1) +
-    print("asking it to getTwo"+
-    def2 = obj1.callRemote("getTwo"+
-    def2.addCallbacks(got_obj2) +
- +
-def got_obj2(obj2): +
-    print("got second object:", obj2) +
-    print("telling it to do three(12)"+
-    obj2.callRemote("three", 12) +
- +
-main() +
-</file> +
-<file python pb1server.py> +
-#!/usr/bin/env python3 +
- +
-# Copyright (c) Twisted Matrix Laboratories. +
-# See LICENSE for details. +
- +
-from twisted.spread import pb +
- +
-class Two(pb.Referenceable): +
-    def remote_three(self, arg): +
-        print("Two.three was given", arg) +
-         +
-class One(pb.Root): +
-    def remote_getTwo(self): +
-        two = Two() +
-        print("returning a Two called", two) +
-        return two +
- +
-from twisted.internet import reactor +
-reactor.listenTCP(8800, pb.PBServerFactory(One())) +
-reactor.run() +
-</file> +
- +
-<code bash> +
-Lancement du serveur $ python3 pb1server.py  +
-returning a Two called <__main__.Two object at 0x7fd4aacfb128> +
-Two.three was given 12 +
- +
-Lancement du client $ python3 pb1client.py  +
-got first object: <twisted.spread.pb.RemoteReference object at 0x7f00e4c76a90> +
-asking it to getTwo +
-got second object: <twisted.spread.pb.RemoteReference object at 0x7f00e4c76b00> +
-telling it to do three(12) +
-</code> +
- +
  
-{{tag>python sb}}+{{tag>python sb intergalactique twisted perspectivebroker}}
perspective_broker.1539867445.txt.gz · Dernière modification : 2018/10/18 12:57 de serge