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/09/09 10:10] – [Introduction] sergeperspective_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 60%> 
-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'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]]**+**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», 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:
   * 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 (espérons-le) 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====
  
-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 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.
  
-  * Usine : internet/protocol.py +  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.internet.protocol.Factory.html|Factory]] : internet/protocol.py 
-  * PBServerFactory : spread/pb.py +  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.PBServerFactory.html|PBServerFactory]] : spread/pb.py 
-  * Courtier : spread/pb.py +  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Broker.html|Broker]] : spread/pb.py 
  
 Autres classes impliquées à un moment donné: Autres classes impliquées à un moment donné:
-  * RemoteReference : spread/pb.py +  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.RemoteReference.html|RemoteReference]] : spread/pb.py 
-  * pb.Root : spread/pb.py , défini comme twisted.spread.flavors.Root dans spread/flavors.py +  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Root.html|pb.Root]] : spread/pb.py , défini comme twisted.spread.flavors.Root dans spread/flavors.py 
-  * pb.Referenceable : spread/pb.py , défini comme twisted.spread.flavors.Referenceable dans spread/flavors.py +  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Referenceable.html|pb.Referenceable]] : spread/pb.py , défini comme twisted.spread.flavors.Referenceable dans spread/flavors.py 
  
 Classes et interfaces impliquées lorsque vous commencez à vous soucier de l'autorisation et de la sécurité: Classes et interfaces impliquées lorsque vous commencez à vous soucier de l'autorisation et de la sécurité:
-  * Portail : cred/portal.py +  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.cred.portal.Portal.html|Portal]] : cred/portal.py 
-  * IRealm : cred/portal.py +  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.cred.portal.IRealm.html|IRealm]] : cred/portal.py 
-  * IPerspective : spread/pb.py , avec lequel vous interagirez généralement via pb.Avatar (un implémenteur de base de l'interface). +  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.IPerspective.html|IPerspective]] : spread/pb.py , avec lequel vous interagirez généralement via [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Avatar.html|pb.Avatar]] (un implémenteur de base de l'interface). 
  
 ====Sous-classement et mise en œuvre==== ====Sous-classement et mise en œuvre====
 +<code python>
 +class A:
 +    pass
 +class B(A):
 +    pass
 +</code>  
  
-Techniquementvous 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:+**Si une class B hérite d'une autre class Aest une sous class de A.**
  
-  * pb.Root , 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. +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: 
-  * 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. + 
-  * 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.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 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. 
  
 ====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», sous-classez-les et nommez vos méthodes publiées avec le préfixe approprié.+À cette écriture, il existe trois «saveurs» d’objets accessibles à distance via des objets [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.RemoteReference.html|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», sous-classez-les et nommez vos méthodes publiées avec le préfixe approprié.
  
-  * twisted.spread.pb.IPerspective implémenteurs+  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.IPerspective.html|twisted.spread.pb.IPerspective]] implémenteurs
 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'efforce de vérifier, autant que faire se peut, que toute méthode pouvant être appelée directement dans une perspective est appelée au nom de l'utilisateur représenté par cette perspective. (Les services avec des exigences inhabituelles pour «pour le compte de», telles que les simulations avec la possibilité de posséder l'avatar d'un autre joueur, sont réalisés en fournissant un accès indirect au point de vue d'un autre utilisateur.) 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'efforce de vérifier, autant que faire se peut, que toute méthode pouvant être appelée directement dans une perspective est appelée au nom de l'utilisateur représenté par cette perspective. (Les services avec des exigences inhabituelles pour «pour le compte de», telles que les simulations avec la possibilité de posséder l'avatar d'un autre joueur, sont réalisés en fournissant un accès indirect au point de vue d'un autre utilisateur.)
  
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://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Referenceable.html|twisted.spread.pb.Referenceable]]
 Les objets référençables sont le type d'objet PB le plus simple. Vous pouvez appeler des méthodes sur ces méthodes et les renvoyer à partir de méthodes permettant d'accéder aux méthodes des autres objets. Les objets référençables sont le type d'objet PB le plus simple. Vous pouvez appeler des méthodes sur ces méthodes et les renvoyer à partir de méthodes permettant d'accéder aux méthodes des autres objets.
  
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://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Viewable.html|twisted.spread.pb.Viewable]]
     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'arguments des méthodes distantes d'une Viewable est modifiée afin d'inclure la perspective représentant l'utilisateur appelant.     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'arguments des méthodes distantes d'une Viewable est modifiée afin d'inclure la perspective représentant l'utilisateur appelant.
  
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'objets locaux. En plus de renvoyer des objets sur lesquels vous pouvez appeler des méthodes distantes, vous pouvez renvoyer des copies structurées d'objets locaux.
  
-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'état que vous souhaitez copier lorsque ceux-ci sont sérialisés, vous pouvez soit utiliser le __getstate__ ou méthode spécialisée par défaut de Python pour cette saveur.+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'état que vous souhaitez copier lorsque ceux-ci sont sérialisés, vous pouvez soit utiliser le  
 +  __getstate__ 
 + ou méthode spécialisée par défaut de Python pour cette saveur.
  
-  * twisted.spread.pb.Copyable +  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Copyable.html|twisted.spread.pb.Copyable]] 
-C'est le type d'objet le plus simple qui peut être copié. Chaque fois que cet objet est renvoyé par une méthode ou transmis en tant qu'argument, il est sérialisé et non sérialisé.+C'est le type d'objet le plus simple qui peut être copié. Chaque fois que cet objet est renvoyé par une méthode ou transmis en tant qu'argument, il est sérialisé et dé-sérialisé.
  
-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'argument perspective sera la perspective qui transmet un argument ou renvoie un résultat, une instance de votre classe Copyable.+[[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Copyable.html|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'argument perspective sera la perspective qui transmet un argument ou renvoie un résultat, une instance de votre classe Copyable.
  
 Pour des raisons de sécurité, afin de permettre la copie d'une classe Copyable particulière, vous devez déclarer un gestionnaire RemoteCopy pour cette sous-classe Copyable. Le moyen le plus simple est de déclarer les deux dans le même module, comme ceci: Pour des raisons de sécurité, afin de permettre la copie d'une classe Copyable particulière, vous devez déclarer un gestionnaire RemoteCopy pour cette sous-classe Copyable. Le moyen le plus simple est de déclarer les deux dans le même module, comme ceci:
  
 <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, RemoteFoo)
 </code> </code>
  
 Dans ce cas, chaque fois qu'un Foo est copié entre pairs, un RemoteFoo sera instancié et rempli avec l'état de Foo. Si vous ne le faites pas, PB se plaindra qu'il y a eu des violations de la sécurité, et la connexion pourrait être fermée. Dans ce cas, chaque fois qu'un Foo est copié entre pairs, un RemoteFoo sera instancié et rempli avec l'état de Foo. Si vous ne le faites pas, PB se plaindra qu'il y a eu des violations de la sécurité, et la connexion pourrait être fermée.
  
-  * twisted.spread.pb.Cacheable +  * [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Cacheable.html|twisted.spread.pb.Cacheable]] 
-Permettez-moi de commencer par un avertissement: Cacheable peut être difficile à comprendre. La motivation à cela peut ne pas être claire si vous n'avez pas d'expérience avec les applications du monde réel qui utilisent des méthodes d'appels à distance. Une fois que vous avez compris pourquoi vous en avez besoin, ce que vous faites peut paraître simple et évident, mais si vous vous trompez, oubliez-le et revenez plus tard. Il est possible d'utiliser PB sans comprendre Cacheable du tout. +Permettez-moi de commencer par un avertissement: [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Cacheable.html|Cacheable]] peut être difficile à comprendre. La motivation à cela peut ne pas être claire si vous n'avez pas d'expérience avec les applications du monde réel qui utilisent des méthodes d'appels à distance. Une fois que vous avez compris pourquoi vous en avez besoin, ce que vous faites peut paraître simple et évident, mais si vous vous trompez, oubliez-le et revenez plus tard. Il est possible d'utiliser PB sans comprendre [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Cacheable.html|Cacheable]] du tout.
- +
-Cacheable est une saveur conçue pour être copiée uniquement lorsque cela est nécessaire et mise à jour à la volée au fur et à mesure des modificationsLorsqu'elle est transmise en tant qu'argument ou valeur de retour, si une mise en cache existe du côté de la connexion sur laquelle elle est copiée, elle sera appelée par ID et non copiée.+
  
-Cacheable est conçu pour minimiser les erreurs liées à la réplication d'un objet entre plusieurs serveurs, en particulier ceux liés aux informations obsolètes. Pour ce faire, Cacheable enregistre automatiquement les états des observateurs et des requêtes, ensembleVous pouvez remplacer la méthode getStateToCacheAndObserveFor(selfperspective, observer) afin de spécifier comment vos observateurs seront stockés et mis à jour.+[[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Cacheable.html|Cacheable]] est une saveur conçue pour être copiée uniquement lorsque cela est nécessaire et mise à jour à la volée au fur et à mesure des modificationsLorsqu'elle est transmise en tant qu'argument ou valeur de retoursi une mise en cache existe du côté de la connexion sur laquelle elle est copiée, elle sera appelée par ID et non copiée.
  
-Semblable à getStateToCopyFor , getStateToCacheAndObserveFor reçoit une perspective. Il reçoit également un observer qui est une référence distante à une quatrième version référençable «secrète»: RemoteCache .+[[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Cacheable.html|Cacheable]] est conçu pour minimiser les erreurs liées à la réplication d'un objet entre plusieurs serveursen particulier ceux liés aux informations obsolètes. Pour ce faire, [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Cacheable.html|Cacheable]] enregistre automatiquement les états des observateurs et des requêtes, ensemble. Vous pouvez remplacer la méthode getStateToCacheAndObserveFor(self, perspective, observer) afin de spécifier comment vos observateurs seront stockés et mis à jour.
  
-Un RemoteCache est simplement l'objet qui représente votre cachette de l'autre côté de la connexion. Il est enregistré en utilisant la même méthode que RemoteCopy ci-dessus. RemoteCache est différent, cependant, car il sera référencé par son homologue. Il agit en tant que référenceuroù toutes les méthodes préfixées par observe_ seront appelables à distance. Il est recommandé à votre objet de maintenir une liste d'observateurs (notesupport de la bibliothèque à venir!) Et de les mettre à jour à l'aide de callRemote lorsque la mise en callRemote modifie de manière à être perceptible par ses clients.+Semblable à getStateToCopyFor getStateToCacheAndObserveFor reçoit une perspective. Il reçoit également un observer qui est une référence distante à une quatrième version référençable «secrète»[[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.RemoteCache.html|RemoteCache]] .
  
-Enfin, lorsque toutes les références à une cachette depuis une perspective donnée sont perdues, stoppedObserving(perspective, observer) sera appelé sur la mémoire cache , avec la même paire perspective observateur avec laquelle getStateToCacheAndObserveFor é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+Un [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.RemoteCache.html|RemoteCache]] est simplement l'objet qui représente votre [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.Cacheable.html|Cacheable]] de l'autre côté de la connexion. Il est enregistré en utilisant la même méthode que [[https://twistedmatrix.com/documents/18.7.0/api/twisted.spread.pb.RemoteCopy.html|RemoteCopy]] , ci-dessus. RemoteCache est différent, cependant, car il sera référencé par son homologue. Il agit en tant que référenceur, où toutes les méthodes préfixées par observe_ seront appelables à distance. Il est recommandé à votre objet de maintenir une liste d'observateurs (note: support de la bibliothèque à venir!) Et de les mettre à jour à l'aide de callRemote lorsque la mise en callRemote modifie de manière à être perceptible par ses clients.
  
 +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. 
  
 +**La page suivante est [[using_perspective_broker|Using Perspective Broker]]**
  
-{{tag>python sb}}+{{tag>python sb intergalactique twisted perspectivebroker}}
perspective_broker.1536487848.txt.gz · Dernière modification : 2018/09/09 10:10 de serge