Dieses Modul enthält Klassen, die nützlich für die Erstellung von Remotediensten sind, die einem Standardmodell für Requests und Antworten entsprechen. Ein Dienst muss wie die folgende Klasse gestaltet sein, um diesem Modell zu entsprechen:
# Each service instance only handles a single request and is then discarded. # Make these objects light weight. class Service(object): # It must be possible to construct service objects without any parameters. # If your constructor needs extra information you should provide a # no-argument factory function to create service instances. def __init__(self): ... # Each remote method must use the 'remote' decorator, passing the request # and response message types. The remote method itself must take a single # parameter which is an instance of RequestMessage and return an instance # of ResponseMessage. @method(RequestMessage, ResponseMessage) def remote_method(self, request): # Return an instance of ResponseMessage. # A service object may optionally implement a 'initialize_request_state' # method that takes as a parameter a single instance of a RequestState. If # a service does not implement this method it will not receive the request # state. def initialize_request_state(self, state): ...
Die Klasse Service ist eine praktische Basisklasse mit den oben genannten Funktionen. Sie implementiert alle erforderlichen und optionalen Methoden für einen Dienst. Die Klasse bietet außerdem praktische Methoden zum Erstellen von Factory-Funktionen, die einen nichtflüchtigen globalen Status an eine neue Dienstinstanz weitergeben können.
Mit dem Remote-Decorator wird deklariert, welche Methoden einer Klasse RPCs verarbeiten sollen. Dagegen ist dieser Decorator nicht für die Verarbeitung von Sockets und verschiedener zugrunde liegender RPC-Protokolle zuständig. Der Decorator sorgt dafür, dass Sie den richtigen Anfragetyp verwenden, aber er überprüft nicht die Initialisierung.
Wird der Remote Decorator bei einer Methode verwendet, wird der Wrapper-Methode das Attribut "remote" zugeordnet. Diese Eigenschaft enthält den request_type
und response_type
, die von der Implementierung der Methode erwartet werden.
Der Remote Decorator bietet keine eigenständige Unterstützung, um abgeleitete Klassen für Remotemethoden zu erstellen. Verwenden Sie zur Erweiterung eines Dienstes die Methode für abgeleitete Klassen. Beispiel:
class MyService(Service): @method(DoSomethingRequest, DoSomethingResponse) def do_something(self, request): ... implement do-something ... class MyBetterService(MyService): @method(DoSomethingRequest, DoSomethingResponse) def do_something(self, request): response = super(MyBetterService, self).do_something.remote.method(request) ... do something with response ... return response