Bienvenue sur IndexError.

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

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

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

WAMP : publier mon objet ou pas ?

+2 votes

Je travaille avec WAMP et, pour faire simple, l'utilisateur charge un fichier JSON (une carte), qui est vérifié et stocké dans un objet (Data) fournissant des méthodes pour le manipuler. A partir de là, d'autres composants, reliés aux ports d'une Raspberry, auront à manipuler les données.

Par exemple, le composant Locator reçoit des informations de la Raspberry (position GPS, par exemple), demande au module Data celles de chaque zone de la carte, en déduit la zone courante puis demande à Data de mettre à jour la position.

Ma question est : vaut-il mieux que je publie mon objet Data pour que chaque composant puisse utiliser directement ses méthodes ou bien que je passe par RPC pour faire appel à chacune ?

self.data.set_position(current_pos)
self.publish('data', pickle.dumps(self.data))
# Plus un abonnement au topic 'data' pour mettre à jour self.data

Ou :

self.call('data.set_position', current_pos)

La première me semble plus pratique (moins d'appels via RPC) mais moins en accord avec le fait que les composants sont indépendants et ont chacun un rôle bien défini. De plus, à part l'app Web qui affiche la carte, les autres composants n'ont besoin d'y accéder que lorsqu'ils reçoivent de nouvelles informations que la RPi (donc pas la peine de faire des appels RPC en boucle). Manipuler l'objet Data "localement" obligerait à publier les modifications à chaque fois pour mettre à jour les autres.

Avec la seconde, j'ai l'avantage de savoir que mes données sont situées à un seul endroit donc que tous les composants accèdent à la même version.

demandé 17-Fev-2015 par Vayel (1,050 points)

1 Réponse

+2 votes
 
Meilleure réponse

Il vaut mieux publier les méthodes comme RPC. D'une part, ton objet risque de devenir très gros, et ça va devoir passer par le réseau. D'autres part, pickle est limité à Python. Le jour où tu veux introduire un autre langage dans le mix (genre une interface web js), tu pourras pas lire l'objet.

répondu 30-Mar-2015 par Sam (4,984 points)
sélectionné 1-Avr-2015 par Vayel
...