json-rpc Dispatcher-Methode
Verfasst: Freitag 30. Juni 2017, 23:26
Hallo zusammen,
ich möchte gerne mit Python auf meinem NAS-Server eine kleine Serverapplikation aufbauen, die es mir ermöglicht mit Hilfe von JSON-RPC Befehlen Skripte usw. auszuführen.
Dafür habe ich das Paket json-rpc 1.10.3 installiert und die Demo-Implementierung ausprobiert. Soweit funktioniert es, aber die Server-Seite verstehe ich nicht. Hier werde ich insbesondere aus der Dispatcher-Methode nicht schlau. die Doku dazu habe ich gelesen: http://json-rpc.readthedocs.io/en/lates ... tcher.html
Hier einmal der Referenzcode:
Ich verstehe, dass in der letzten Zeile ein Webserver gestartet ist, der dann auf Port 4000 lauscht. Dieser Webserver ruft bei Bedarf die "callback"-Funktion application auf. Dies ist Bestandteil des Paketes "werkzeug". Am Ende der Funktion, wird eine Response an den Client geschickt. Die lambda Funktion verstehe ich auch noch. In einem Fall wird der String einfach zurückgegeben, im anderen Fall ist der Rückgabewert a+b.
wie gesagt, die Dispatcher-Methode und ihre Anwendung verstehe ich nicht.
Hier ist mir der Verwendungszweck nicht klar. Ich finde die Stelle nicht, an der diese Funktion jemals aufgerufen wird:
Hier ist mir die Syntax nicht klar. Die Methode mit eckiger Klammer kann ich nirgendwo als Beispiel finden:
ich möchte gerne mit Python auf meinem NAS-Server eine kleine Serverapplikation aufbauen, die es mir ermöglicht mit Hilfe von JSON-RPC Befehlen Skripte usw. auszuführen.
Dafür habe ich das Paket json-rpc 1.10.3 installiert und die Demo-Implementierung ausprobiert. Soweit funktioniert es, aber die Server-Seite verstehe ich nicht. Hier werde ich insbesondere aus der Dispatcher-Methode nicht schlau. die Doku dazu habe ich gelesen: http://json-rpc.readthedocs.io/en/lates ... tcher.html
Hier einmal der Referenzcode:
Code: Alles auswählen
from werkzeug.wrappers import Request, Response
from werkzeug.serving import run_simple
from jsonrpc import JSONRPCResponseManager, dispatcher
@dispatcher.add_method
def foobar(**kwargs):
return kwargs["foo"] + kwargs["bar"]
@Request.application
def application(request):
# Dispatcher is dictionary {<method_name>: callable}
dispatcher["echo"] = lambda s: s
dispatcher["add"] = lambda a, b: a + b
response = JSONRPCResponseManager.handle(
request.data, dispatcher)
return Response(response.json, mimetype='application/json')
if __name__ == '__main__':
run_simple('localhost', 4000, application)
wie gesagt, die Dispatcher-Methode und ihre Anwendung verstehe ich nicht.
Hier ist mir der Verwendungszweck nicht klar. Ich finde die Stelle nicht, an der diese Funktion jemals aufgerufen wird:
Code: Alles auswählen
@dispatcher.add_method
def foobar(**kwargs):
return kwargs["foo"] + kwargs["bar"]
Code: Alles auswählen
dispatcher["echo"] = ...
dispatcher["add"] = ...