Predis está dando ‘Error al leer la línea del servidor’

Estoy usando predis y está suscrito a un canal y escuchando, arroja el error y muere, como se muestra a continuación, después de 60 segundos, es probable que no sea mi error del servidor web o su tiempo de espera.

Hay un problema similar que se discute aquí . No pude conseguir mucho de eso.

Intenté establecer connection_timeout en predis conf file a 0, pero no ayuda mucho.

Además, si sigo usando (le envío datos y procesa) al trabajador, no da ningún error. Entonces es probable que sea un tiempo de espera en algún lugar, y eso también en conexión.

Aquí está mi fragmento de código, que probablemente está produciendo un error, porque si los datos se le dan al trabajador, ejecuta este código y sigue adelante, lo que no produce ningún error después de eso.

$pubsub = $redis->pubSub(); $pubsub->subscribe($channel1); foreach ($pubsub as $message) { //doing stuff here and unsubscribing from channel } 

Rastro

 PHP Fatal error: Uncaught exception 'Predis\Network\ConnectionException' with message 'Error while reading line from the server' in Predis/Network/ConnectionBase.php:159 Stack trace: #0 library/vendor/predis/lib/Predis/Network/StreamConnection.php(195): Predis\Network\ConnectionBase->onConnectionError('Error while rea...') #1 library/vendor/predis/lib/Predis/PubSub/PubSubContext.php(259): Predis\Network\StreamConnection->read() #2 library/vendor/predis/lib/Predis/PubSub/PubSubContext.php(206): Predis\PubSub\PubSubContext->getValue() #3 pdf/file.php(16): Predis\PubSub\PubSubContext->current() #4 {main} thrown in Predis/Network/ConnectionBase.php on line 159 

Comprobado el tiempo de espera redis.conf también, también está deshabilitado.

Simplemente configure el parámetro de conexión read_write_timeout en 0 o -1 para solucionar este problema. p.ej

 $redis = new Predis\Client('tcp://10.0.0.1:6379'."?read_write_timeout=0"); 

La configuración de los parámetros de conexión se documenta en el archivo README . El autor de Redis notó la relevancia del parámetro read_write_timeout para este error en un problema en GitHub , en el que señala que:

Si está utilizando Predis en un script similar a un demonio, debe establecer read_write_timeout en -1 si desea desactivar completamente el tiempo de espera (este valor funciona con versiones anteriores y nuevas de Predis). Además, recuerde que debe desactivar el tiempo de espera predeterminado de Redis estableciendo timeout = 0 en redis.conf o Redis interrumpirá la conexión de clientes inactivos después de 300 segundos de inactividad.

Tuve un problema similar, una mejor solución a la situación no es establecer el tiempo de espera en 0, sino usar un retroceso exponencial y establecer el límite superior e inferior. El cambio en el parámetro de configuración connection_timeout a 0 también solucionará el problema.

Tengo la resolución al problema. Por lo tanto, hay un límite para los puertos que un servidor de aplicaciones puede conectar a una aplicación en particular en otra máquina. Estos puertos se estaban agotando. Incrementamos el límite y el problema se resolvió.

¿Cómo llegamos a conocer este problema? En php, estábamos obteniendo el error “No se puede asignar la dirección solicitada” al crear un socket (código de error 99).