如果phpRedis的connect的timeout參數設置了值,getTimeout()和getReadTimeout()都是這個值。
subscribe()的超時,會是這個值的2倍。
如果connect的timeout設置了0,永不超時,subscribe()的超時為php.ini里面的default_socket_timeout的兩倍。
如果在超時時間內,沒有publish到channel的話,subscribe就會報read error on connection。
所以,應該在connect的時候,timeout為小值,比如0.2,在subscribe前,
$redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
設置為-1,0是不管用的。奇怪的是connect的時候timeout默認為0表示時間不限
如果connect的timeout傳遞了0,但是subscribe超時還是由default_socket_timeout說了算。
只有在
$redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
或
default_socket_timeout設置為-1
時,才不會超時。