2010-06-29 3 views
1

Кто-нибудь читал протокол Hikson's май 2010 года-hixie-thewebsocketprotocol-76 WebSocket?HTML5: Последние WebSockets

Вот источник файла .htm:

<html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <script type="text/javascript"> 
     var socket = new WebSocket('ws://localhost:8181/websession'); 
     socket.onopen = function() { 
      alert('handshake successfully established. May send data now...'); 
     }; 
     socket.onclose = function() { 
      alert('connection closed'); 
     }; 
    </script> 
</head> 
<body> 
</body> 
</html> 

Если у меня есть TCP-порт прослушивания на 8181, это запрос, который я получаю, когда я загрузить файл .htm выше в Chrome:

GET /websession HTTP/1.1 
Upgrade: WebSocket 
Connection: Upgrade 
Host: localhost:8181 
Origin: null 
[\n] 

(Где [\ п] CRLF характер.)

Что я должен вернуться к этому рукопожатия нож? проект-Хикси-thewebsocketprotocol-76 показывает:

HTTP/1.1 101 WebSocket Protocol Handshake 
Upgrade: WebSocket 
Connection: Upgrade 
Sec-WebSocket-Origin: http://example.com 
Sec-WebSocket-Location: ws://example.com/demo 
Sec-WebSocket-Protocol: sample 

8jKS'y:G*Co,Wxa- 

Этот ответ вызывает socket.onclose огонь, хотя.

ответ

2

Проект 76 переименованы заголовки ответа WebSocket- в Sec-WebSocket-, и добавил некоторые излишне уродливую Key заголовок и тело запроса криптографический материал, к которому 8jKS'y:G*Co,Wxa- является ответом. Но это только правильный ответ для примера, включенного в проект; это не хорошо, возвращая эту конкретную строку для любого другого запроса. См. this post для объяснения того, как реализовать новый протокол.

В любом случае, если вы используете новейшие сборки разработки, Chrome/Chromium по-прежнему будет использовать старый проект протокола 75 (как демонстрирует ваш запрос), и не будет разговаривать с сервером, который реализует новый протокол. См. Chromium blog для получения дополнительной информации. Если вам нужно поддерживать старые/текущие версии Chrome, вам необходимо реализовать два протокола WebSocket.

Это всегда является риском для разработки материалов по протоколу, который еще не стандартизирован. Вы можете ожидать раздражающей межоперационной работы до тех пор, пока WebSocket не будет завершен; вы можете предпочесть удерживать до тех пор.

(Попытка на самом деле прочитать спецификацию и выяснить, что именно изменилось между рядами нечитаемых алгоритмов синтаксического анализа, - это упражнение в расстройстве. Я понятия не имею, почему это написано так, а не обычные спецификации типа BNF RFC, например, как будто Хикси написала парсер на C, а затем написала автоматизированный инструмент для перевода кода на английский язык. C было бы более читаемым TBH.)

0

Возможно, вы нашли wsproxy, включенную в noVNC, ссылка. Он прозрачно поддерживает оба клиента WebSockets v75 и v76.

wsproxy - это общий WebSockets для прокси-сервера TCP. Существует как C, так и версия python wsproxy, включенная в noVNC.

http://github.com/kanaka/noVNC/tree/master/utils/

Кроме того, только, чтобы держать вещи интересными, последняя (не версия пока) проект предложения не изменяет вещи снова (в частности, изменения, как вещи обрамлены): http://www.whatwg.org/specs/web-socket-protocol/

Смежные вопросы