我在用predis https://github.com/nrk/predis,它已订阅频道并正在收听。它抛出以下错误(如下)并在 60 秒后死亡。这肯定不是我的网络服务器错误或其超时。
有一个类似的问题正在讨论here https://github.com/nrk/predis/issues/32。无法得到太多。
我尝试将 predis conf 文件中的 connection_timeout 设置为 0,但没有多大帮助。
另外,如果我继续使用(向其发送数据并进行处理)工作人员,它不会给出任何错误。所以很可能是某个地方超时了,这也是有联系的。
这是我的代码片段,它可能会产生错误,因为如果将数据提供给工作人员,它会运行此代码并继续,之后不会产生错误。
$pubsub = $redis->pubSub();
$pubsub->subscribe($channel1);
foreach ($pubsub as $message) { //doing stuff here and unsubscribing from channel
}
Trace
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");
设置连接参数为记录在自述文件中 https://github.com/nrk/predis#connecting-to-redis。 Redis 的作者指出了以下内容的相关性:read_write_timeout
此错误的参数GitHub 上的一个问题 https://github.com/nrk/predis/issues/33#issuecomment-1395652,他在其中指出:
如果您在类似守护进程的脚本中使用 Predis,您应该设置read_write_timeout
to -1
如果您想完全禁用超时(此值适用于旧版本和新版本的 Predis)。另外,请记住,您必须通过设置禁用 Redis 的默认超时timeout = 0
in redis.conf https://github.com/antirez/redis/blob/2.2.10/redis.conf#L38或者 Redis 将在 300 秒不活动后断开空闲客户端的连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)