Отправка websocket Ping / pong кадра из браузера


Я продолжаю читать о сообщениях пинг-понга в websockets, чтобы поддерживать связь, но я не уверен, что они есть. Это отдельный тип кадра? (Я не вижу никаких методов на объекте javascript WebSocket в chrome, связанных с пинг-понгом). Или это просто шаблон дизайна (например, я буквально отправляю "ping" или любую другую строку на сервер и отвечаю на нее). Пинг-понг вообще связан с кадрами продолжения?

причина, по которой я спрашиваю, это то, что я использую фреймворк python, который работает за Mongrel2, поэтому мне интересно, есть ли способ отправить Mongrel2 конкретное сообщение для пинг-понга, которое сообщит ему, чтобы сохранить соединение без моего приложения python, которому нужно беспокоиться об этом. Аналогично тому, что для него есть отдельный метод HTTP, я думаю. И я предполагаю, что выделенный фрейм сообщения ping/pong может быть проще (меньше нагрузки на сервер и сеть), чем строка "ping", хотя это, вероятно, не будет иметь большого значения.

EDIT: я просто посмотрел на RFC 6455 и похоже, что пинг-понг-это определенно типы фреймов управления со своими собственными кодами операций. Итак, как я могу отправить кадр Ping из javascript в Chrome?

2 86

2 ответа:

нет JavaScript API для отправки кадров ping или получения кадров pong. Это либо поддерживается вашим браузером, либо нет. Там также нет API, чтобы включить, настроить или определить, поддерживает ли браузер и использует пинг-понг кадров. Там было обсуждение создания Javascript Ping / pong API для этого. Существует вероятность того, что pings может быть настроен/обнаружен в будущем, но маловероятно, что Javascript сможет напрямую отправлять и получать пинг-понг кадры.

однако, если вы контролируете как клиентский, так и серверный код, то вы можете легко добавить поддержку пинг-понга на более высоком уровне. Вам понадобится какой-то заголовок типа сообщения/метаданные в вашем сообщении, если у вас их еще нет, но это довольно просто. Если вы не планируете отправлять пинги сотни раз в секунду или иметь тысячи одновременных клиентов, накладные расходы будут довольно минимальными, чтобы сделать это самостоятельно.

Ping предназначен для отправки только с сервера на клиент, и браузер должен ответить как можно скорее с помощью Pong OpCode, автоматически. Так что вам не нужно беспокоиться об этом на более высоком уровне.

хотя не все браузеры поддерживают стандарт, как они предполагают, у них могут быть некоторые различия в реализации такого механизма, и это может даже означать, что нет функциональности ответа Pong. Но лично я использую пинг / понг, и никогда не видел клиента, который не реализует это тип кода операции и автоматического ответа на низкоуровневой реализации на стороне клиента.