Отправка фрейма websocket ping/pong из браузера

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

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

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

2 ответов


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

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


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

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