2016-01-20 5 views
0

Sur flask socket-io, si 2 utilisateurs sont connectés et que user1 envoie un message à user2, comment puis-je intercepter la charge utile envoyée à user2 (dans le contexte d'application de user2, dans l'ordre pour le modifier)? Je ne veux pas modifier la charge utile envoyée par user1 (ce serait trivial).flask-socketio: before_send/after_send

Logiquement, je suppose qu'il devrait y avoir un moyen d'intercepter l'événement sur le contexte de user2 juste avant que la charge utile soit transmise sur le ws.

Merci!

Répondre

1

Un correctif de singe de custom_emit_internal a fait l'affaire. Heureusement, il ne cassera pas à la prochaine mise à jour!

+0

J'ai fait un décorateur et je l'utilise pour les fonctions d'interception – Andrew

0

Je pense que vous demandez une fonctionnalité côté client. Dans le serveur, le seul contexte existant lorsqu'un message est envoyé est celui de l'expéditeur. L'échange va comme ceci:

client       | server 
--------------------------------------------------------------------------- 
user1 sends event to server  | 
payload includes msg for user2 | 
           | 
           | server decodes the msg payload in 
           | user1's context and sends msg to user2 
           | 
user2 receives msg from server | 

Comme vous le voyez, dans le serveur, l'utilisateur 2 ne fait pas partie de cette transaction, seules les questions user1. Le contexte côté serveur pour user2 peut même ne pas résider dans le même processus serveur, maintenant que Flask-SocketIO peut conduire une batterie de serveurs derrière un équilibreur de charge. En outre, le destinataire de l'événement peut ne pas être un utilisateur unique, il peut s'agir d'un groupe d'utilisateurs dans une pièce, ou même de tous les utilisateurs connectés.

Je ne suis pas sûr de comprendre le but de votre demande, mais si vous voulez élaborer, je pourrais peut-être vous conseiller.

+0

Salut Miguel - cas typique: avant d'envoyer un message aux utilisateurs destinataires (par exemple, ceux qui ont rejoint une salle), je veux vérifier si le jeton des destinataires n'a pas expiré. Cela devrait fonctionner dans le gestionnaire de base quelque part juste après que Kombu (sur un autre serveur) ait reçu l'événement et soit prêt à l'envoyer sur le ws. Autre cas: J'ai besoin de crypter (au-dessus de TLS) avec une clé différente par destinataire - il est logique de le chiffrer seulement avant de le pousser dans un WS spécifique. Merci de votre aide! – ptou

+0

Ne serait-il pas aussi facile pour vous de vérifier le jeton de votre (vos) destinataire (s) avant d'envoyer le message? Ou encore mieux, de déconnecter les utilisateurs lorsque leurs jetons expirent, séparément de l'envoi de messages? – Miguel

+0

Salut Miguel, ce n'était qu'un sous-ensemble de choses dont j'aurais besoin. Le meilleur exemple est vraiment: User1 envoie la charge utile à une pièce avec User2 & User3. Utilisateur2 doit recevoir (charge utile + charge utile spécifique pour l'utilisateur2 uniquement disponible dans le contexte utilisateur2). Idem pour user3. Pensez-vous qu'il est possible d'avoir un rappel du gestionnaire d'événements juste avant de publier sur un WS? Merci pour votre aide Miguel – ptou