2010-05-23 14 views
5

Ho il codice seguente:Memcache PHP - controlla se qualche server è disponibile nel pool?

$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'); 
} 

vorrei fare una funzione che controlla se uno dei miei assistenti nel mio Pool memcache è disponibile. Come si può fare?

risposta

5

È possibile controllare lo stato di un server utilizzando Memcache::getServerStatus.

+0

Bel metodo, +1! =) –

+2

Abbiamo finito con "memcache :: getExtendedStats()" da quando abbiamo scoperto che getServerStatus era un po 'inaffidabile. getExtendedStatus sembra dare sempre lo stato corretto dei server in tempo reale. – Industrial

2

Utilizzando 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

L'unico problema è che ogni server guasto potrebbe aggiungere 1 secondo al tempo di richiesta (circa), che è esattamente il tipo di memoria che si suppone debba combattere. Suggerirei un timeout da qualche parte intorno a 0.001 o meno ... Ci vorranno alcuni esperimenti ... – ircmaxell

+1

@ircmaxell: D'accordo, ecco perché è una variabile. Ancora il 'Memcache :: getServerStatus()' sembra una scelta migliore, non sapevo di quel metodo. –

Problemi correlati