我正在使用predis并且它订阅了一个频道并且正在监听,它会抛出错误并死掉,如下所示,在60秒之后,它肯定不是我的网络服务器错误或它的超时.
目前正在讨论的一个类似的问题在这里.无法得到很多.
我尝试将predis conf文件中的connection_timeout设置为0,但没有多大帮助.
此外,如果我继续使用(向它发送数据并且它处理)工作者它不会给出任何错误.所以它可能在某个地方超时,而且也是连接的.
这是我的代码片段,它可能会产生错误,因为如果将数据提供给worker,它将运行此代码并继续前进,之后不会产生任何错误.
$pubsub = $redis->pubSub();
$pubsub->subscribe($channel1);
foreach ($pubsub as $message) { //doing stuff here and unsubscribing from channel
}
Run Code Online (Sandbox Code Playgroud)
跟踪
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
Run Code Online (Sandbox Code Playgroud)
检查了redis.conf超时,它也被禁用了.
ami*_*jer 36
只需将read_write_timeout连接参数设置为0或-1即可解决此问题.例如
$redis = new Predis\Client('tcp://10.0.0.1:6379'."?read_write_timeout=0");
Run Code Online (Sandbox Code Playgroud)
自述文件中记录了设置连接参数.Redis的作者在GitHub的一个问题中注意到该read_write_timeout参数与此错误的相关性,他在其中指出:
如果您在类似守护程序的脚本中使用Predis,则应设置
read_write_timeout为-1是否要完全禁用超时(此值适用于较早版本和较新版本的Predis).此外,请记住,必须通过timeout = 0在redis.conf中设置来禁用Redis的默认超时,否则Redis将在300秒不活动后丢弃空闲客户端的连接.
| 归档时间: |
|
| 查看次数: |
20484 次 |
| 最近记录: |