JavaScript и WebSockets: использование определенного протокола - PullRequest
6 голосов
/ 09 сентября 2011

В настоящее время я работаю с WebSockets и сервером PHP: он очень хорошо работает с Google Chrome и Opera, но не с Firefox 6.

Я думаю, что это связано с последней версией протокола: Iгде-то увидите, что он использует седьмую версию, тогда как она является более старой для Google Chrome и Opera.

Итак, я изменил свой серверный код для управления этой новой версией: хешируя безопасный ключ с помощью 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 и другие материалы, Firefox успешно подключается.Но если другой клиент хочет подключиться (даже другой Firefox), первый с Firefox отключает себя.

Я видел, что буфер, полученный socket_recv (), либо пуст, либо хэширован ...

Поэтому я решил пропустить идею управления протоколом, используемым Firefox 6 (нет документации в Интернете ...!): Я думаю, что было бы проще указать протокол для использования непосредственно в JavaScript.На этой странице они говорят, что мы можем написать это:

var mySocket = new WebSocket("http://www.example.com/socketserver", "my-custom-protocol");

Но что мы должны написать вместо "my-custom-protocol" , чтобы использоватьпротокол, управляемый Google Chrome и Opera?

Заранее спасибо!

1 Ответ

10 голосов
/ 09 сентября 2011

Параметр протокола для конструктора WebSocket на самом деле является «суб-протоколом» (его часто называют этим именем), и это суб-протокол прикладного уровня.Это не влияет на текущую версию протокола WebSocket.Браузеры в основном поддерживают одну версию самого протокола WebSocket.Большинство серверов поддерживают несколько версий протокола.

В Firefox 6.0 появилась поддержка новой серии протоколов HyBi (HyBi-00 на самом деле является просто копией протокола Hixie-76).Версии HyBi представляют новый формат кадрирования данных, а не просто заменяют рукопожатие.Chrome 14 также использует новую серию протоколов HyBi.

Вот самая последняя версия протокола WebSockets: http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-14, хотя Firefox 6.0 на самом деле http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07, но это не так.Неужели так много реальных изменений (в основном текстовых изменений самой спецификации).

Вы уверены, что Firefox успешно подключается (т.е. вы действительно получаете событие onopen в браузере)?

...