2010-05-23 31 views
5

Tôi có đoạn mã sau:PHP memcache - kiểm tra xem máy chủ nào có sẵn trong hồ bơi không?

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

Tôi muốn thực hiện một chức năng để kiểm tra nếu có các máy chủ của tôi trong Pool memcache của tôi là có sẵn. Làm thế nào điều này có thể được thực hiện?

Trả lời

5

Bạn có thể kiểm tra tình trạng của máy chủ bằng cách sử dụng Memcache::getServerStatus.

+0

Phương pháp hay, +1! =) –

+2

Chúng tôi đã kết thúc bằng cách sử dụng "memcache :: getExtendedStats()" vì chúng tôi thấy rằng getServerStatus là một chút không đáng tin cậy. getExtendedStatus dường như luôn cung cấp trạng thái chính xác của các máy chủ trong thời gian thực. – Industrial

2

Sử dụng 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

Vấn đề duy nhất với điều đó, là mỗi máy chủ không thành công có thể thêm 1 giây vào thời gian yêu cầu (khoảng), chính xác là loại memcache hiệu suất được cho là sẽ chiến đấu. Tôi muốn đề nghị một thời gian chờ của một nơi nào đó khoảng 0,001 hoặc ít hơn ... Nó sẽ mất một số thử nghiệm ... – ircmaxell

+1

@ircmaxell: Đồng ý, đó là lý do tại sao nó là một biến. Tuy nhiên, 'Memcache :: getServerStatus()' có vẻ như là một lựa chọn tốt hơn, tôi không biết về phương pháp đó. –

Các vấn đề liên quan