Predis提供“从服务器读取行时出错”
我正在使用predis并订阅了频道并进行监听,它抛出错误并死了,如下图所示,过了60秒后,肯定不是我的Web服务器错误或超时。
目前正在讨论的一个类似的问题在这里。无法得到太多。
我尝试将predis conf文件中的connection_timeout设置为0,但没有太大帮助。
另外,如果我继续使用(向其发送数据并进行处理)该工作程序,则不会出现任何错误。因此,它可能在某处超时,并且在连接方面也是如此。
这是我的代码段,可能会产生错误,因为如果将数据提供给工作程序,它将运行该代码并继续前进,此后不会产生任何错误。
$pubsub = $redis->pubSub();$pubsub->subscribe($channel1);
foreach ($pubsub as $message) { //doing stuff here and unsubscribing from channel
}
跟踪
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
也检查了redis.conf超时,它也被禁用。
回答:
只需将read_write_timeout
连接参数设置为0或-1即可解决此问题。例如
$redis = new Predis\Client('tcp://10.0.0.1:6379'."?read_write_timeout=0");
设置连接参数记录在README文件中。Redis的作者在GitHub上的一个问题中指出了read_write_timeout
此错误与参数的相关性,他在其中指出:
如果要在类似守护程序的脚本中使用Predis,则应设置
read_write_timeout
为-1
要完全禁用超时(此值适用于Predis的较新版本)。另外,请记住,必须通过`timeout0`在redis.conf中进行设置来禁用Redis的默认超时时间,否则Redis将在闲置300秒后断开空闲客户端的连接。
以上是 Predis提供“从服务器读取行时出错” 的全部内容, 来源链接: utcz.com/qa/423067.html