Cliente WebSocket en PHP?

¿Hay una biblioteca o cliente para conectarse a un servidor WebSocket de PHP? Si no, ¿hay alguna razón por la cual?

( phpwebsocket solo parece tener código de cliente Javascript).

Ninguno de los anteriores es una buena respuesta. Varios de ellos son sobre un servidor, mientras que la pregunta es sobre un cliente. El código de Rodislav no funcionó para mí, ya que no hablaba con mi servidor WebSockets en Heroku. Sin embargo, esta biblioteca funcionó muy bien:

https://github.com/Devristo/phpws

ACTUALIZACIÓN: Si bien este código funcionó cuando todo estaba bien, parece que no hay ningún error de devoluciones o excepciones, y como resultado no se puede usar cuando hay un error (por ejemplo, el servidor no se está ejecutando, la dirección es incorrecta, el puerto está bloqueado, etc.). Por lo tanto, aunque fue divertido experimentar, no es utilizable en el código de producción.

bueno, es fácil y puedes hacer esto Gracias a todas las fonts donde encontramos respuestas (lo siento, no puedo recordarlo todo)

 65535) { $payloadLengthBin = str_split(sprintf('%064b', $payloadLength), 8); $frameHead[1] = ($masked === true) ? 255 : 127; for ($i = 0; $i < 8; $i++) { $frameHead[$i + 2] = bindec($payloadLengthBin[$i]); } // most significant bit MUST be 0 (close connection if frame too big) if ($frameHead[2] > 127) { $this->close(1004); return false; } } elseif ($payloadLength > 125) { $payloadLengthBin = str_split(sprintf('%016b', $payloadLength), 8); $frameHead[1] = ($masked === true) ? 254 : 126; $frameHead[2] = bindec($payloadLengthBin[0]); $frameHead[3] = bindec($payloadLengthBin[1]); } else { $frameHead[1] = ($masked === true) ? $payloadLength + 128 : $payloadLength; } // convert frame-head to string: foreach (array_keys($frameHead) as $i) { $frameHead[$i] = chr($frameHead[$i]); } if ($masked === true) { // generate a random mask: $mask = array(); for ($i = 0; $i < 4; $i++) { $mask[$i] = chr(rand(0, 255)); } $frameHead = array_merge($frameHead, $mask); } $frame = implode('', $frameHead); // append payload to frame: for ($i = 0; $i < $payloadLength; $i++) { $frame .= ($masked === true) ? $payload[$i] ^ $mask[$i % 4] : $payload[$i]; } return $frame; } ?> 

Una biblioteca PHP Websocket con una aplicación de chat de ejemplo. Con demostración y descripción completa de la implementación.

http://www.techzonemind.com/php-websocket-library-two-way-real-time-communication/

Esta biblioteca se ve bastante bien, si estás de acuerdo con las dependencias: https://github.com/gabrielbull/php-websocket-client

Traté de usar muchos de los anteriores para incluirlos en tivoka (json-rpc), pero o bien no eran lo suficientemente buenos para leer paquetes más grandes (no obtener todo el fotogtwig o leer el siguiente) o tenían grandes dependencias.

Entonces, escribí https://github.com/Textalk/websocket-php

En lugar de leer primero todos los datos disponibles del socket y luego decodificarlos, lee el encabezado del cuadro y analiza la longitud de la carga, y luego solo carga eso.

Carece de soporte para ping / pong, pero creo que hace bien la mayoría de las otras cosas. Funciona bien con tivoka y tiene al menos un 92% de autotestas 🙂 Puede necesitar algunas funciones adicionales para verificar si hay otro marco sin leerlo realmente.

Déjame saber lo que piensas.