Predis是给“错误而从服务器读取行”(Predis is giving 'Error w

2019-07-30 18:26发布

我使用predis和订阅频道和收听,它抛出的错误和模具,如下图所示,后60秒exaxtly,它肯定不是我的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超时设置过,它也被禁用。

Answer 1:

就在设置read_write_timeout连接参数设置为0或-1,以解决这个问题。 例如

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

设置连接参数的README文件 。 Redis的笔者注意到的相关read_write_timeout参数这个错误GitHub上的问题 ,其中他指出:

如果您在守护样脚本中使用Predis你应该设置read_write_timeout-1 ,如果你想完全禁用超时(此值可与新旧版本Predis的)。 此外,请记住,你必须通过设置禁用Redis的默认超时timeout = 0在redis.conf或Redis的下降将空闲客户端的300秒内无后的连接。



Answer 2:

我有类似的问题,较好地解决了局面超时未设置为0,但使用指数退避,并设置上限和下限。 在配置参数connection_timeout更改为0,也将解决这一问题。



Answer 3:

我得到了解决问题的办法。 因此,有是一个应用程序服务器可以连接到另一台机器上的特定应用端口的限制。 这些端口几乎枯竭。 我们增加了限制,这个问题得到了解决。

我们是怎么知道这个问题? 在PHP中,我们得到在创建一个套接字(错误代码99)“不能分配请求的地址”错误。



文章来源: Predis is giving 'Error while reading line from server'
标签: php redis