perspective_broker
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
perspective_broker [2018/09/09 10:07] – [Les choses que vous pouvez copier à distance] serge | perspective_broker [2022/12/05 15:51] (Version actuelle) – [Python: Twisted Perspective Broker] serge | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Python: Twisted Perspective Broker ====== | ====== Python: Twisted Perspective Broker ====== | ||
- | <WRAP center round info 60%> | + | <WRAP center round info centeralign |
- | Niveau Pro | + | **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' | ||
+ | * les exemples ne respectent pas le PEP 8, c'est imbriqué au possible | ||
</ | </ | ||
+ | |||
+ | <WRAP center round box 60% > | ||
+ | * **{{tagpage> | ||
+ | * **[[using_perspective_broker|Page suivante]]** Using Perspective Broker | ||
+ | * **[[https:// | ||
+ | </ | ||
+ | |||
+ | **Traduction Google de [[https:// | ||
=====Introduction Perspective Broker===== | =====Introduction Perspective Broker===== | ||
- | Traduction Google de **[[https:// | + | **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' | + | 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' |
- | Le système Perspective Broker (en abrégé «PB», qui génère de nombreux jeux de mots liés aux sandwichs) repose sur quelques concepts centraux: | + | Le système Perspective Broker (en abrégé «PB») repose sur quelques concepts centraux: |
- | * sérialisation : prendre des objets et des types assez arbitraires, | + | * serialization = sérialisation : prendre des objets et des types assez arbitraires, |
- | * Appels | + | * remote method calls = appels |
- | Ce document contiendra plusieurs exemples qui (espérons-le) | + | 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»: |
====Feuille de route de l' | ====Feuille de route de l' | ||
- | Pour commencer, voici les principales classes, interfaces et fonctions impliquées dans PB, avec des liens vers le fichier où elles sont définies (qui sont toutes sous-tordues / bien sûr). Ne vous souciez pas de comprendre ce qu'ils font tous encore: il est plus facile de les comprendre grâce à leur interaction que de les expliquer un par un. | + | Pour commencer, voici les principales classes, interfaces et fonctions impliquées dans PB, avec des liens vers le fichier où elles sont définies (qui sont toutes sous twisted |
- | | + | |
- | PBServerFactory : spread/ | + | |
- | | + | |
Autres classes impliquées à un moment donné: | Autres classes impliquées à un moment donné: | ||
- | RemoteReference : spread/ | + | |
- | pb.Root : spread/ | + | |
- | pb.Referenceable : spread/ | + | |
Classes et interfaces impliquées lorsque vous commencez à vous soucier de l' | Classes et interfaces impliquées lorsque vous commencez à vous soucier de l' | ||
- | | + | |
- | IRealm : cred/ | + | |
- | IPerspective : spread/ | + | |
====Sous-classement et mise en œuvre==== | ====Sous-classement et mise en œuvre==== | ||
+ | <code python> | ||
+ | class A: | ||
+ | pass | ||
+ | class B(A): | ||
+ | pass | ||
+ | </ | ||
+ | |||
+ | **Si une class B hérite d'une autre class A, B est une sous class de A.** | ||
- | Techniquement, | + | Techniquement, |
- | * pb.Root , pb.Referenceable : vous les sous- classez | + | * [[https:// |
- | * pb.Avatar : Vous serez en train de sous - classer | + | * [[https:// |
- | * 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:// |
====Les choses que vous pouvez appeler à distance==== | ====Les choses que vous pouvez appeler à distance==== | ||
- | À cette écriture, il existe trois «saveurs» d’objets accessibles à distance via des objets RemoteReference . Chacune de ces variantes possède une règle sur la manière dont le message callRemote est transformé en appel de méthode local sur le serveur. Pour utiliser l'une de ces «saveurs», | + | À cette écriture, il existe trois «saveurs» d’objets accessibles à distance via des objets |
- | * twisted.spread.pb.IPerspective implémenteurs | + | * [[https:// |
C'est la première interface avec laquelle nous traitons. C'est une «perspective» sur votre application PB. Les perspectives sont un peu spéciales car elles sont généralement le premier objet auquel un utilisateur donné peut accéder dans votre application (après sa connexion). Un utilisateur ne devrait recevoir qu'une référence à sa propre perspective. PB s' | C'est la première interface avec laquelle nous traitons. C'est une «perspective» sur votre application PB. Les perspectives sont un peu spéciales car elles sont généralement le premier objet auquel un utilisateur donné peut accéder dans votre application (après sa connexion). Un utilisateur ne devrait recevoir qu'une référence à sa propre perspective. PB s' | ||
Ligne 55: | Ligne 78: | ||
La façon dont la plupart des gens voudront implémenter IPerspective est de sous-classer pb.Avatar. Les méthodes accessibles à distance sur les instances pb.Avatar sont nommées avec le préfixe perspective_ . | La façon dont la plupart des gens voudront implémenter IPerspective est de sous-classer pb.Avatar. Les méthodes accessibles à distance sur les instances pb.Avatar sont nommées avec le préfixe perspective_ . | ||
- | * twisted.spread.pb.Referenceable | + | * [[https:// |
Les objets référençables sont le type d' | Les objets référençables sont le type d' | ||
Ligne 62: | Ligne 85: | ||
Les méthodes accessibles à distance sur les référenceables sont nommées avec le préfixe remote_ . | Les méthodes accessibles à distance sur les référenceables sont nommées avec le préfixe remote_ . | ||
- | * twisted.spread.pb.Viewable | + | * [[https:// |
Les objets visualisables sont des objets pouvant être référencés à distance et qui nécessitent en outre la possibilité de savoir qui les appelle. La liste d' | Les objets visualisables sont des objets pouvant être référencés à distance et qui nécessitent en outre la possibilité de savoir qui les appelle. La liste d' | ||
Ligne 70: | Ligne 93: | ||
En plus de renvoyer des objets sur lesquels vous pouvez appeler des méthodes distantes, vous pouvez renvoyer des copies structurées d' | En plus de renvoyer des objets sur lesquels vous pouvez appeler des méthodes distantes, vous pouvez renvoyer des copies structurées d' | ||
- | Deux variantes de base permettent de copier des objets à distance. Encore une fois, vous pouvez les utiliser en les sous-classant. Afin de spécifier l' | + | Deux variantes de base permettent de copier des objets à distance. Encore une fois, vous pouvez les utiliser en les sous-classant. Afin de spécifier l' |
+ | | ||
+ | ou méthode spécialisée par défaut de Python pour cette saveur. | ||
- | * twisted.spread.pb.Copyable | + | * [[https:// |
- | C'est le type d' | + | C'est le type d' |
- | Copyable fournit une méthode que vous pouvez remplacer, getStateToCopyFor(perspective) , qui vous permet de décider à quoi un objet va ressembler pour la perspective qui le demande. L' | + | [[https:// |
Pour des raisons de sécurité, afin de permettre la copie d'une classe Copyable particulière, | Pour des raisons de sécurité, afin de permettre la copie d'une classe Copyable particulière, | ||
<code python> | <code python> | ||
- | from twisted.spread import flavors | + | from twisted.spread import flavors |
- | class Foo ( flavors . Copyable ): | + | |
- | pass | + | class Foo(flavors.Copyable): |
- | class RemoteFoo ( flavors . RemoteCopy ): | + | pass |
- | pass | + | |
- | flavors . setUnjellyableForClass ( Foo , RemoteFoo ) | + | class RemoteFoo (flavors.RemoteCopy): |
+ | pass | ||
+ | | ||
+ | flavors.setUnjellyableForClass(Foo, | ||
</ | </ | ||
Dans ce cas, chaque fois qu'un Foo est copié entre pairs, un RemoteFoo sera instancié et rempli avec l' | Dans ce cas, chaque fois qu'un Foo est copié entre pairs, un RemoteFoo sera instancié et rempli avec l' | ||
- | * twisted.spread.pb.Cacheable | + | * [[https:// |
- | Permettez-moi de commencer par un avertissement: | + | Permettez-moi de commencer par un avertissement: |
- | + | ||
- | Cacheable | + | |
- | Cacheable est conçu | + | [[https:// |
- | Semblable | + | [[https:// |
- | Un RemoteCache est simplement l' | + | Semblable à getStateToCopyFor |
- | Enfin, lorsque toutes les références à une cachette depuis une perspective donnée sont perdues, stoppedObserving(perspective, | + | Un [[https:// |
+ | Enfin, lorsque toutes les références à un [[https:// | ||
+ | **La page suivante est [[using_perspective_broker|Using Perspective Broker]]** | ||
- | {{tag> | + | {{tag> |
perspective_broker.1536487669.txt.gz · Dernière modification : 2018/09/09 10:07 de serge