2013-01-04 42 views
8

Tôi đã phải xây dựng một hệ thống xếp hàng PHP, và tìm thấy bài viết xuất sắc này http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-1-understanding-the-project/ và tôi đã sử dụng nó để tạo ra một hệ thống xếp hàng PHP, rất dễ cài đặt và sử dụng.Làm thế nào để xây dựng một hệ thống xếp hàng PHP

Dưới đây là mã cho queue.php, chạy từ trình bao (puTTy hoặc somesuch).

<?PHP 

//. set this constant to false if we ever need to debug 
//. the application in a terminal. 
define('QUEUESERVER_FORK', true); 

//////// fork into a background process //////// 
if(QUEUESERVER_FORK){  
    $pid = pcntl_fork(); 
    if($pid === -1) die('error: unable to fork.');  
    else if($pid) exit(0);   
    posix_setsid();  
    sleep(1);   
    ob_start(); 
} 

$queue = array(); 

//////// setup our named pipe //////// 
$pipefile = '/tmp/queueserver-input'; 

if(file_exists($pipefile))  
    if(!unlink($pipefile))   
     die('unable to remove stale file'); 

umask(0); 


if(!posix_mkfifo($pipefile, 0666))  
    die('unable to create named pipe'); 

$pipe = fopen($pipefile,'r+'); 

if(!$pipe) die('unable to open the named pipe'); 

stream_set_blocking($pipe, false); 

//////// process the queue //////// 
while(1){  

    while($input = trim(fgets($pipe))){   
     stream_set_blocking($pipe, false);   
     $queue[] = $input;  
    }  

    $job = current($queue);  
    $jobkey = key($queue);  

    if($job){   
     echo 'processing job ', $job, PHP_EOL;     
     process($job);     
     next($queue);   
     unset($job, $queue[$jobkey]);    
    }else{   
     echo 'no jobs to do - waiting...', PHP_EOL;   
     stream_set_blocking($pipe, true);  
    }   

    if(QUEUESERVER_FORK) ob_clean(); 

} 

?> 

Phần khó nhất là nhận các chức năng pcntl hoạt động trên máy chủ của tôi.

Câu hỏi của tôi là "Làm cách nào để bắt đầu công việc tự động khi/nếu máy chủ phải khởi động lại?"

+1

Điều gì, chính xác, _is_ câu hỏi của bạn? –

+1

@MartinBean Làm cách nào để tôi bắt đầu công việc tự động khi/nếu máy chủ phải khởi động lại? –

+1

bạn có thể sửa đổi kịch bản bắt đầu của máy chủ để thực hiện việc này hoặc bạn có thể thêm tập lệnh sẽ báo cáo trạng thái tập lệnh/máy chủ và tập lệnh thứ hai để khởi động lại công việc và sau đó sử dụng chúng từ máy chủ cục bộ hoặc từ xa để theo dõi máy chủ/công việc khởi động lại (với cronjob) – llamerr

Trả lời

9

Câu hỏi của tôi là "Làm cách nào để bắt đầu công việc tự động khi/nếu máy chủ phải khởi động lại?"

Bằng cách thêm nó vào danh sách những thứ bắt đầu khi máy chủ khởi động. Thật không may, các hướng dẫn để làm như vậy thay đổi rất nhiều bởi hệ điều hành và phiên bản hệ điều hành. Bạn có thể muốn sử dụng một cái gì đó nhiều hơn một chút nền tảng. Tôi đã có rất nhiều may mắn với supervisor, mà bạn có thể có thể tìm thấy trong các gói repos trên hệ điều hành của bạn lựa chọn.

Điều đó nói rằng, bạn đang đi theo lộ trình điên rồ. Điều bạn đang làm đã được thực hiện trước đó, tốt hơn, bởi những người tuyệt vời. Kiểm tra hệ thống hàng đợi công việc Gearman và kèm theo PECL extension. Nó xảy ra rằng người giám sát là khá tiện dụng để giữ cho công nhân Gearman của bạn còn sống.

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