2012-08-02 2 views
12

predis을 사용 중이며 채널에 수신 중이며 수신 중이면 60 초 후에 exaxtly 오류가 발생하여 사망합니다. 그것의 타임 아웃.Predis가 '서버에서 회선을 읽는 동안 오류가 발생했습니다.'

비슷한 문제가 논의되었습니다 here. 그것의 많은 것을 얻을 수 없었다.

predis conf 파일의 connection_timeout을 0으로 설정했지만 많은 도움이되지 않습니다.

또한 계속 작업자에게 데이터를 보내고 처리하면 작업자에게 오류가 발생하지 않습니다. 그래서 가능성이 시간 초과 어딘가에, 그리고 너무 연결합니다.

여기에 내 코드 단편이 있습니다. 오류가 발생합니다. 작업자에게 데이터가 주어지면이 코드가 실행되고 이후에 오류가 발생하지 않기 때문에 오류가 발생합니다.

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 

$pubsub = $redis->pubSub(); 
$pubsub->subscribe($channel1); 

foreach ($pubsub as $message) { //doing stuff here and unsubscribing from channel 
} 

추적은 또한 비활성화, 너무 redis.conf 시간 초과를 검사하였습니다.

+0

redis-cli를 사용하여 redis fine에 연결할 수 있습니까? –

+0

예, 데이터가 처리되면 작업자가 정상적으로 작동하고 60 초 동안 오류가 발생하면 오류가 발생합니다 – amitchhajer

답변

30

이 문제를 해결하려면 read_write_timeout 연결 매개 변수를 0 또는 -1로 설정하면됩니다. 예 :

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

연결 매개 변수 설정은 documented in the README입니다. 당신이 데몬 같은 스크립트에서 Predis를 사용하는 경우 당신이 원하는 경우에 당신이 -1read_write_timeout를 설정해야합니다

: 레디 스의 저자는 자신이 있다고 지적하는 an issue on GitHub이 오류에 read_write_timeout 매개 변수의 관련성을 지적 타임 아웃을 완전히 비활성화하십시오 (이 값은 이전 버전과 새로운 버전의 Predis에서 작동합니다). 또한 timeout = 0redis.conf에 설정하여 Redis의 기본 시간 초과를 비활성화해야합니다. 그렇지 않으면 300 초 동안 사용하지 않으면 Redis가 유휴 클라이언트 연결을 끊습니다.

+9

Laravel을 사용하는 경우 구성/데이터베이스의 Redis Database에 'read_write_timeout'=> -1을 추가하십시오 .php – Sangar82

+2

@ Sangar82, 감사합니다! – ihoru

+0

heroku redis 서버의 경우,'heroku redis : timeout [redis-app-name] --seconds 0 --app [parent-app-name]' –

3

나는 더 나은 해결 방법으로 타임 아웃을 0으로 설정하지 않고 지수 백 오프를 사용하여 상한과 하한을 설정합니다. 구성 매개 변수 connection_timeout을 0으로 변경하면 문제가 해결됩니다.

관련 문제