Updated Redisent.php to attempt three reconnects to the redis server before giving up. Also supressed fwrite errors.

This commit is contained in:
Allen Torres 2012-12-28 09:33:09 -05:00
parent f6334bb3b8
commit e4f39a6093

View File

@ -44,6 +44,13 @@ class Redisent {
*/ */
public $port; public $port;
/**
* Number of times to attempt a reconnect
*
* @var int
*/
public $max_reconnects = 3;
/** /**
* Creates a Redisent connection to the Redis server on host {@link $host} and port {@link $port}. * Creates a Redisent connection to the Redis server on host {@link $host} and port {@link $port}.
* @param string $host The hostname of the Redis server * @param string $host The hostname of the Redis server
@ -73,10 +80,17 @@ class Redisent {
$command = sprintf('*%d%s%s%s', count($args), CRLF, implode(array_map(array($this, 'formatArgument'), $args), CRLF), CRLF); $command = sprintf('*%d%s%s%s', count($args), CRLF, implode(array_map(array($this, 'formatArgument'), $args), CRLF), CRLF);
/* Open a Redis connection and execute the command */ /* Open a Redis connection and execute the command */
$reconnects = 0;
for ($written = 0; $written < strlen($command); $written += $fwrite) { for ($written = 0; $written < strlen($command); $written += $fwrite) {
$fwrite = fwrite($this->__sock, substr($command, $written)); $fwrite = @fwrite($this->__sock, substr($command, $written));
if ($fwrite === FALSE) { if ($fwrite === FALSE || $fwrite === 0) {
throw new Exception('Failed to write entire command to stream'); if ($reconnects >= (int)$this->max_reconnects) {
throw new Exception('Failed to write entire command to stream');
}else{
fclose($this->__sock);
$this->establishConnection();
$reconnects++;
}
} }
} }