Es kann einfach sein.
Warum jetzt? Als ich mit Tornado mit WebSocket kommunizierte
Senden Sie den Namen der Rückrufmethode mit Javascript → Führen Sie die von tornado angegebene Methode aus und senden Sie den Namen der Rückruffunktion an Javascript → Führen Sie die von Javascript angegebene Rückruffunktion aus
Ich wollte eine Methode aus einem String aufrufen.
Stellen Sie zunächst eine Verbindung zu Javascript und WebSocket her und senden Sie den Namen der Aufrufmethode und andere Parameter auf der Tornadoseite. Die Parameter werden in JSON gesendet.
python
var ws = new WebSocket('ws://server/ws');
var p = {};
//Name der Rückrufmethode
p['callback'] = 'wake_up';
//Andere Parameter
p['msg'] = 'Wake Up!!!!';
ws.send(JSON.stringify(p));
ws.onmessage = function(e) {
var data = JSON.parse(e.data);
console.log(data['message']);
};
Die Tornado-Seite getattr von on_message ist der Hauptteil dieses Titels.
app.py
from tornado import ioloop,web,websocket
import json
#Rückrufklasse
from callback import Callback
class WSHandler(websocket.WebSocketHandler):
#Wenn die Nachricht kommt
def on_message(self, message):
data = json.loads(message)
#Erstellen einer Instanz der Callback-Klasse
cb = Callback(data)
#Methodenaufruf
result = getattr(cb, data['callback'])()
#Wert, um zu Javascript zurückzukehren
return_value = {}
return_value['message'] = result
#Senden Sie eine Nachricht mit WebSocket
self.write_message(json.dumps(return_value))
handlers = [
(r'/ws', WSHandler),
]
settings = dict(
debug = False,
)
app = web.Application(handlers, **settings)
app.listen(sys.argv[1])
ioloop.IOLoop.instance().start()
Die aufzurufende Methode.
callback.py
class Callback(data):
def __init__(self, data):
self.data = data
def wake_up(self):
return self.data['msg']
Sie sollten jetzt "Wake Up !!!!" auf Ihrer Browserkonsole sehen.
Die Verwendung von getattr ist wie folgt. Details bleiben der offiziellen Dokumentation überlassen.
python
cb = Callback(data)
result = cb.wake_up()
#Das Obige ist dasselbe wie der Code unten
result2 = getattr(cb, 'wake_up')()
#Wenn Sie wie folgt vorgehen, wird der Rückgabewert übrigens nicht zurückgegeben und das Objekt wird zugewiesen.
result3 = getattr(cb, 'wake_up')
Hat es dir wie result3 oben gefallen? ?? ?? Aber wenn Sie darüber nachdenken, ist es richtig. .. ..
2013-03-15 Nachtrag Ein subtiler Fehler wurde behoben. Entschuldigung.
Recommended Posts