Envoyer le cadre de ping/pong de websocket à partir du navigateur

Je n'arrête pas de lire des messages de ping/pong sur 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 cadre distinct? (Je ne vois aucune méthode sur un objet WebSocket javascript dans chrome liée au ping-pong). Ou est-ce juste un motif de conception (par exemple j'envoie littéralement "ping" ou toute autre chaîne de caractères au serveur et je lui demande de répondre). Est-ce que le ping-pong est lié aux cadres de continuation?

la raison pour laquelle je demande est que j'utilise un framework python cela va derrière Mongrel2, donc je me demande s'il y a un moyen d'Envoyer à Mongrel2 un message de ping/pong spécifique qui lui dirait de garder la connexion en vie sans que mon application python ait besoin de s'en inquiéter. Analogue à une méthode HTTP séparée pour cela, je suppose. Et j'imagine qu'un cadre de messages 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 sont certainement des types de cadres de contrôle avec leurs propres opcodes. Alors comment envoyer un cadre de Ping à partir de javascript dans Chrome?

86
demandé sur danny 2012-05-14 18:30:02

2 réponses

il n'y a pas D'API Javascript pour envoyer des cadres de ping ou recevoir des cadres de pong. C'est soit pris en charge par votre navigateur, ou pas. 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 de ping/pong. Il y a eu discussion sur la création D'une API de ping/pong Javascript pour cela. Il est possible que les pings soient configurables/détectables à l'avenir, mais il est peu probable que Javascript soit capable d'envoyer directement et recevoir des cadres de ping / pong.

cependant, si vous contrôlez à la fois le code client et le code serveur, vous pouvez facilement ajouter le support ping/pong à un niveau plus élevé. 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 prévoyez d'envoyer des pings des centaines de fois par seconde ou avoir des milliers de clients simultanés, les frais généraux va être assez minime pour le faire vous-même.

87
répondu kanaka 2012-05-14 15:41:30

Ping est destiné à être envoyé seulement du serveur au client, et le navigateur devrait répondre dès que possible avec Pong OpCode, automatiquement. Si vous n'avez pas à vous soucier que de niveau plus élevé.

bien que tous les navigateurs ne prennent pas en charge la norme comme ils le supposent, ils pourraient avoir quelques différences dans la mise en œuvre d'un tel mécanisme, et cela pourrait 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 client qui ne mettre en œuvre ce type de OpCode et de réponse automatique sur le bas niveau de mise en œuvre côté client.

25
répondu moka 2012-05-15 09:40:47