Cela peut être basique.
Pourquoi maintenant? Quand je communiquais avec WebSocket en utilisant tornado
Envoyer le nom de la méthode de rappel avec Javascript → Exécutez la méthode spécifiée par tornado et envoyez le nom de la fonction de rappel à Javascript → Exécuter la fonction de rappel spécifiée par Javascript
Je voulais appeler une méthode à partir d'une chaîne.
Tout d'abord, connectez-vous à Javascript et WebSocket et envoyez le nom de la méthode d'appel et d'autres paramètres du côté de la tornade. Les paramètres sont envoyés en JSON.
python
var ws = new WebSocket('ws://server/ws');
var p = {};
//nom de la méthode de rappel
p['callback'] = 'wake_up';
//Autres paramètres
p['msg'] = 'Wake Up!!!!';
ws.send(JSON.stringify(p));
ws.onmessage = function(e) {
var data = JSON.parse(e.data);
console.log(data['message']);
};
Le côté tornade, getattr de on_message est la partie principale de ce titre.
app.py
from tornado import ioloop,web,websocket
import json
#classe de rappel
from callback import Callback
class WSHandler(websocket.WebSocketHandler):
#Quand le message arrive
def on_message(self, message):
data = json.loads(message)
#Créer une instance de la classe Callback
cb = Callback(data)
#Appel de méthode
result = getattr(cb, data['callback'])()
#Valeur pour revenir à Javascript
return_value = {}
return_value['message'] = result
#Envoyer un message avec 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()
La méthode à appeler.
callback.py
class Callback(data):
def __init__(self, data):
self.data = data
def wake_up(self):
return self.data['msg']
Vous devriez maintenant voir "Wake Up !!!!" sur la console de votre navigateur.
L'utilisation de getattr est la suivante. Les détails sont laissés à la documentation officielle.
python
cb = Callback(data)
result = cb.wake_up()
#Ce qui précède est le même que le code ci-dessous
result2 = getattr(cb, 'wake_up')()
#En passant, si vous procédez comme suit, la valeur de retour ne sera pas renvoyée et l'objet sera attribué.
result3 = getattr(cb, 'wake_up')
L'avez-vous fait comme result3 ci-dessus? ?? ?? Mais quand on y pense, c'est vrai. .. ..
2013-03-15 PostScript Correction d'une erreur subtile. Excusez-moi.
Recommended Posts