Socket.io Client: répondre à tous les événements avec un gestionnaire?
Est-il possible d'avoir une prise de courant.io client de répondre à tous les événements sans avoir de spécifier à chaque cas individuellement?
Par exemple, quelque chose comme cela (ce qui évidemment ne fonctionne pas pour le moment):
var socket = io.connect("http://myserver");
socket.on("*", function(){
//listen to any and all events that are emitted from the
//socket.io back-end server, and handle them here.
//is this possible? how can i do this?
});
Je veux que cette fonction de rappel à appeler lors de tous les événements sont reçus par le client-côté de la prise.io code.
Est-ce possible? Comment?
- J'ai ouvert le problème suivant sur le transfert de tous types d'événements, j'ai aussi été l'ajout de solutions que j'ai trouvé: github.com/Automattic/socket.io/issues/1715
Vous devez vous connecter pour publier un commentaire.
Il ressemble à la socket.io bibliothèque, magasins dans un dictionnaire. En tant que tel, ne pense pas que ce serait possible sans modifier le code source.
De source:
Solution mise à jour pour la socket.io-client 1.3.7
Utiliser comme ceci:
Aucune réponse n'a fonctionné pour moi, mais le de Mathias Hopf et Maros Pixel est venu près, c'est ma version ajustée.
REMARQUE: ce uniquement les captures des événements personnalisés, pas de connexion/déconnexion etc
Enfin, il y a un module appelé socket.io-générique qui permet d'utiliser des caractères génériques sur le côté serveur et client
Ici vous allez ...
Cela permettra de capturer des événements comme
connecting
,connect
,disconnect
,reconnecting
trop, afin de ne prendre en charge.Note: cette réponse n'est valable que pour la socket.io 0.x
Vous pouvez remplacer socket.$émettent
Avec le code suivant, vous avez deux nouvelles fonctions:
socket
plusLe courant (Avril 2013) GitHub doc sur les événements sont exposés mentionne un
socket.on('anything')
. Il semble que le 'tout' est un espace réservé pour un événement personnalisé nom, pas un mot-clé à attraper n'importe quel événement.J'ai juste commencé à travailler avec les web sockets et Node.JS, et a immédiatement eu un besoin de gérer de tout l'événement, ainsi que de découvrir ce que les événements ont été envoyés. Ne peut pas croire cette fonctionnalité est manquant à partir de socket.io.
socket.io-client 1.7.3
En Mai 2017 ne pouvais pas prendre l'une ou l'autre des solutions de travail tout à fait ainsi que je voulais - faites un intercepteur, l'aide à Node.js pour des fins de test uniquement:
Références:
Il est une longue discussion sur ce sujet sur le Socket.IO référentiel numéro de page. Il existe une variété de solutions posté il y a (par exemple, en remplaçant EventEmitter avec EventEmitter2). lmjabreu publié une autre solution il y a quelques semaines: un mnp module appelé socket.io-générique que des correctifs dans un générique de l'événement sur la Socket.IO (fonctionne avec la Prise de courant.IO, ~0.9.14).
Parce que votre question est assez générale en demandant une solution, je vais planter ce celle qui ne nécessite pas le piratage du code, juste un changement dans la façon dont vous utilisez le support.
J'ai décidé d'avoir mon client app envoyer exactement le même cas, mais avec une charge utile.
Et sur le serveur, quelque chose comme...
Je ne sais pas si en utilisant toujours le même événement pourrait causer des problèmes, peut-être les collisions d'un genre à l'échelle, mais cela a servi mes fins de l'amende juste.
Toutes les méthodes que j'ai trouvé (y compris le support.io-générique et socketio générique) ne fonctionne pas pour moi. Apparemment, il n'y a pas de $émettent dans le support.io 1.3.5...
Après la lecture de socket.io le code, j'ai patché le suivant qui a FAIT un travail:
Ce pourrait être une solution pour les autres. Cependant, ATM je n'ai pas de comprendre exactement pourquoi personne d'autre ne semble avoir des problèmes avec les "solutions"?!? Des idées? Peut-être que c'est mon vieux nœud version (0.10.31)...
@Matthias Hopf réponse
Mise à jour de réponse pour v1.3.5. Il y avait un bug avec args, si vous voulez écouter sur un événement ancien et
*
événement.Je suis en utilisant Angulaire 6 et les mnp package: ngx-socket io
...
...
Après connectez la prise, j'utilise ce code, c'est de la manipulation de tous les événements personnalisés...