web-dev-qa-db-fra.com

Envoi d'un cadre Ping / Pong Websocket à partir d'un navigateur

Je continue à lire sur les messages ping/pong dans les WebSockets pour maintenir la connexion en vie, mais je ne suis pas sûr de ce qu'ils sont. Est-ce un type de trame distinct? (Je ne vois aucune méthode sur un objet WebSocket javascript dans chrome liée au ping-pong). Ou s'agit-il simplement d'un motif de conception (par exemple, j'envoie littéralement "ping" ou toute autre chaîne Le ping-pong est-il du tout lié aux trames de continuation?

La raison pour laquelle je pose la question est que j’utilise un framework python qui fonctionne derrière Mongrel2, je me demande donc s’il existe un moyen d’envoyer à Mongrel2 un message spécifique de ping/pong qui lui indiquerait de conserver la connexion vivante sans mon python ayant besoin de s’inquiéter. Analogue au fait de disposer d’une méthode HTTP distincte pour elle, je suppose. Et j’imagine qu’un cadre de message ping/pong dédié pourrait être plus simple ( moins de charge sur le serveur et le réseau) que la chaîne "ping", bien que cela n’aurait probablement pas trop d’importance.

EDIT: Je viens de regarder RFC 6455 et il semble que Ping et Pong soient définitivement des types de trames de contrôle avec leurs propres opcodes. Alors, comment puis-je envoyer un cadre Ping à partir de javascript dans Chrome?

115
danny

Il n'y a pas d'API Javascript pour envoyer des cadres de ping ou recevoir des cadres de pong. Ceci est supporté par votre navigateur ou non. Il n'y a pas non plus d'API pour activer, configurer ou détecter si le navigateur prend en charge et utilise des cadres ping/pong. Il y avait discussion sur la création d'une API Javascript ping/pong pour cela. Il est possible que les pings soient configurables/détectables à l’avenir, mais il est peu probable que Javascript puisse envoyer et recevoir directement des trames ping/pong.

Toutefois, si vous contrôlez le code client et le code serveur, vous pouvez facilement ajouter la prise en charge du ping/pong à un niveau supérieur. Vous aurez besoin d'une sorte d'en-tête/métadonnées de type de message dans votre message si vous ne l'avez pas déjà, mais c'est assez simple. Sauf si vous envisagez d'envoyer des pings des centaines de fois par seconde ou d'avoir des milliers de clients simultanés, les frais généraux seront assez minimes pour le faire vous-même.

105
kanaka

Ping est destiné à être envoyé uniquement du serveur au client, et le navigateur doit répondre dès que possible avec Pong OpCode, automatiquement. Vous ne devez donc pas vous inquiéter de cela à un niveau supérieur.

Bien que tous les navigateurs ne prennent pas en charge la norme comme ils le supposent, ils peuvent avoir des différences dans la mise en œuvre de ce mécanisme, et cela peut même signifier qu'il n'y a pas de fonctionnalité de réponse Pong. Mais personnellement, j'utilise Ping/Pong et je n'ai jamais vu de client qui n'implémente pas ce type d'opcode et de réponse automatique lors d'une implémentation côté client de bas niveau.

21
moka