У меня та же проблема (и я не могу разместить комментарий здесь, поэтому я отправляю ответ).
На самом деле, я только что скачал и протестировал phpwebsocket.
В Safari 5.1.4 он работает просто отлично.
В Chrome 17 я получил ту же ошибку в консоли журнала сценариев:
Error during WebSocket handshake: 'Sec-WebSocket-Accept' header is missing
Итак, в websocket.class.phpЯ добавил в заголовок, возвращаемый сервером:
$accept = base64_encode(SHA1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11"));
И получаю ошибку:
Error during WebSocket handshake: Sec-WebSocket-Accept mismatch
Теперь заголовок, полученный сервером:
GET /websocket/server.php HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:12345
Origin: http://localhost:8888
Sec-WebSocket-Key: OqMJI0t/cOl6d6JNE+Op0g==
Sec-WebSocket-Version: 13
И отправленный сервером обратно заголовок:
HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: http://localhost:8888
Sec-WebSocket-Location: ws://localhost:12345/websocket/server.php
Sec-WebSocket-Accept: ZjY5ODliNTViYzJlOTNkMjk4OTg3Y2U2NjQ3MTBlZjZiNzliYzk4Yg==
Sec-WebSocket-Accept выглядит хорошо, но все равно есть ошибка несоответствия.Вы видите ошибку где-нибудь?Возможно, протокол был изменен для вычисления Sec-WebSocket-Accept, но я не нахожу его ... Спасибо за вашу помощь!
Редактировать: Здесь, кажется, решение (для меня, по крайней мере): добавление параметра true в функцию SHA1, как указано в файлах, приведенных в этой теме .Итак, Sec-WebSocket-Accept должен быть найден так:
$accept = base64_encode(SHA1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true));
И Sec-WebSocket-Key1 и Sec-WebSocket-Key2, похоже, больше не присутствуют в запросе клиента, вместо этого,$ key должен быть извлечен из заголовка: «Sec-WebSocket-Key».
Новая проблема : Кажется также, что даже если соединение через веб-сокет теперь работает на рукопожатии, оно отключаетсякогда отправлено первое сообщение.