2010-05-23 14 views
5

Tengo el siguiente código:Memcache de PHP: compruebe si hay algún servidor disponible en el grupo.

$cluster['local'] = array('host' => '192.168.1.1', 'port' => '11211', 'weight' => 50); 
$cluster['local2'] = array('host' => '192.168.1.2', 'port' => '11211', 'weight' => 50); 

$this->memcache = new Memcache; 

foreach ($this->cluster() as $cluster) { 
    $this->memcache->addServer($cluster['host'], $cluster['port'], $this->persistent, $cluster['weight'], 10, 10, TRUE , 'failure'); 
} 

me gustaría hacer una función que comprueba si alguno de mis servidores en mi piscina Memcache está disponible. ¿Como se puede hacer esto?

Respuesta

5

Usted puede verificar el estado de un servidor utilizando Memcache::getServerStatus.

+0

¡Buen método, +1! =) –

+2

Terminamos usando "memcache :: getExtendedStats()" ya que encontramos que getServerStatus era un poco poco fiable. getExtendedStatus parece dar siempre el estado correcto de los servidores en tiempo real. – Industrial

2

Usando fsockopen():

$timeout = 1; 
$fp = fsockopen('192.168.1.1', 11211, $errno, $errstr, $timeout); 

if (is_resource($fp)) 
{ 
    // connection to 192.168.1.1:11211 successful 
    fclose($fp); 
} 

else 
{ 
    // failed to connect to 192.168.1.1:11211 within $timeout second(s). 
} 
+3

El único problema con eso es que cada servidor con errores podría agregar 1 segundo al tiempo de solicitud (aproximadamente), que es exactamente el tipo de rendimiento que se supone que debe combatir Memcache. Sugeriría un tiempo de espera de alrededor de 0.001 o menos ... Tomará algo de experimentación ... – ircmaxell

+1

@ircmaxell: De acuerdo, es por eso que es una variable. Aún el 'Memcache :: getServerStatus()' parece una mejor opción, no sabía acerca de ese método. –

Cuestiones relacionadas