Remote Service Library

Modul ini berisi class yang berguna untuk membuat layanan jarak jauh yang sesuai dengan model permintaan dan respons standar. Agar sesuai dengan model ini, layanan harus seperti class berikut:

# 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):
        ...

Class Service adalah class dasar praktis yang menyediakan fungsi di atas. Class ini menerapkan semua metode opsional yang diperlukan untuk layanan. Class ini juga memiliki metode praktis untuk membuat fungsi factory yang dapat meneruskan status global persisten ke instance layanan baru.

Dekorator jarak jauh digunakan untuk mendeklarasikan metode class mana yang dimaksudkan untuk melayani RPC. Meskipun dekorator ini tidak bertanggung jawab untuk menyerahkan soket dan berbagai protokol RPC yang mendasarinya. Dekorator memastikan bahwa Anda menggunakan jenis permintaan yang benar, tetapi tidak memeriksa inisialisasi.

Saat dekorator jarak jauh digunakan pada suatu metode, metode wrapper akan memiliki properti 'jarak jauh' yang terkait dengannya. Properti ini berisi request_type dan response_type yang diharapkan dalam penerapan metode.

Dengan sendirinya, dekorator jarak jauh tidak memberikan dukungan apa pun untuk membuat subclass metode jarak jauh. Untuk memperluas layanan, gunakan metode subclass untuk mendekorasi ulang. Contoh:

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