how debug chrome check google-chrome websocket phpwebsocket
http://www.wilky.it/Shared/phpwebsocket.zip

google chrome - debug - El encabezado ''Sec-WebSocket-Accept'' falta en Chrome 17



debug websocket chrome (3)

Me di cuenta de que en la consola de Chrome 19: Un servidor no debe enmascarar los marcos que envía al cliente. quizá este es el problema. Se desconecta tan pronto como se envía un mensaje. Funciona bien en Firefox.

Solucioné este problema de websocket y ahora funciona en Chrome. Primero utilicé:

Luego usé la función de codificación de: https://github.com/lemmingzshadow/php-websocket

Arreglé la función de codificación reemplazada con la del archivo connection.php en github de lemmingzshadow y comenzó a funcionar. La función se llama: hybi10Encode en el archivo / server / lib / WebSocket / connection.php.

cambie este parámetro en la codificación de la función: $ enmascarado = verdadero en $ enmascarado = falso

Editar: Probé este phpwebsocket: http://www.wilky.it/Shared/phpwebsocket.zip y funciona en Firefox, pero mi pregunta aún permanece: ¿cómo hago para que websockets funcione con un servidor php en Chrome 17?

Estoy siguiendo el tutorial aquí: http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/

Parece que el cliente se conecta y luego se desconecta inmediatamente. Me di cuenta de este error en la consola:

Error durante el protocolo de enlace WebSocket: Falta el encabezado ''Sec-WebSocket-Accept''

Lo intento en Chrome 17.0.963.56 en mi localhost WAMP con la extensión php_sockets habilitada.

Vi en alguna parte que Chrome había cambiado lo que soportaba, pero no profundizó en cómo solucionarlo. Esperaba que alguien pudiera ayudarme a superarlo. (Soy nuevo en websockets).

Servidor:

{RUTA}> php startDaemon.php

2012-02-20 07:02:51 Sistema: Identificación de Socket Resource # 7 creada.

2012-02-20 07:02:51 Sistema: socket vinculado a localhost: 8000.

2012-02-20 07:02:51 Sistema: Comienza a escuchar en Socket.

2012-02-20 07:03:01 WebSocket: Identificación del recurso # 8 ¡CONECTADO!

2012-02-20 07:03:01 WebSocket: solicitando un apretón de manos ...

2012-02-20 07:03:01 WebSocket: Handshaking ...

2012-02-20 07:03:01 WebSocket: Hecho apretón de manos ...

2012-02-20 07:03:01 WebSocket: Identificación del recurso # 8 desconectado!

Cliente:

Estado del zócalo: 0

Estado del zócalo: 3 (cerrado)


Tengo el mismo problema (y parece que no puedo publicar un comentario aquí, así que publico una respuesta).

En realidad, acabo de descargar y probar phpwebsocket.

En safari 5.1.4, funciona bien.

En Chrome 17, recibí el mismo error en la consola de registro de scripts:

Error during WebSocket handshake: ''Sec-WebSocket-Accept'' header is missing

Entonces, en websocket.class.php, agregué al encabezado devuelto por el servidor:

$accept = base64_encode(SHA1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11"));

Y obtengo el error:

Error during WebSocket handshake: Sec-WebSocket-Accept mismatch

Ahora, el encabezado recibido por el servidor es:

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

Y el encabezado enviado por el servidor es:

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==

El Sec-WebSocket-Accept parece bueno, pero aún hay un error de desajuste. ¿Ves un error en alguna parte? Tal vez el protocolo ha cambiado para calcular Sec-WebSocket-Accept, pero no lo encuentro ... ¡Gracias por tu ayuda!

Editar: Aquí parece ser la solución (para mí, al menos): agregar el parámetro verdadero a la función SHA1, como se encuentra en los archivos que se dan en este tema . Entonces, el Sec-WebSocket-Accept debe encontrarse así:

$accept = base64_encode(SHA1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true));

Y, Sec-WebSocket-Key1 y Sec-WebSocket-Key2 no parecen estar presentes en la solicitud del cliente, en su lugar, $ key debe extraerse del encabezado: "Sec-WebSocket-Key".

Problema nuevo : parece que incluso si la conexión del socket web ahora funciona en el handshake, se desconecta cuando se envía el primer mensaje.


Una manera FÁCIL de solucionarlo es agregar información Sec-WebSocket-Accept cuando do_handshake, codificar de la siguiente manera:

list($resource,$host,$origin,$key) = $this->getheaders($buffer); $accept = base64_encode(SHA1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true)); $upgrade = "HTTP/1.1 101 Web Socket Protocol Handshake/r/n" . "Upgrade: WebSocket/r/n" . "Connection: Upgrade/r/n" . "WebSocket-Origin: {$origin}/r/n" . "WebSocket-Location: ws://{$host}{$resource}/r/n". "Sec-WebSocket-Accept: " . $accept . "/r/n/r/n"; $this->handshakes[$socket_index] = true; socket_write($socket,$upgrade,strlen($upgrade));

dónde,

$accept = base64_encode(SHA1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true));

$ key es Sec-WebSocket-Key obtenido de $ buffer, puede print_r ($ buffer) para echar un vistazo.

Espero que esto pueda resolver tu problema ...