2016-03-03 105 views
1

我想知道下面的JS腳本(服務器端)是否正確,因爲它佔用了太多的CPU資源。這樣工作的cron工作。Node.js - 使用PHP進程的cron作業

當服務器每秒運行PHP(通過cron作業)時,PHP腳本(abc123.php)將連接到數據庫並通過套接字將數據結果返回給客戶端瀏覽器。我希望每個用戶都能實時看到他們瀏覽器的最新結果。

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
var cronjob = require('cron').CronJob; 
var runner = require("child_process"); 

io.on('connection', function (socket) { 

    var myJob = new cronjob('* * * * * *', function() { 

    var phpScriptPath = "/home/domain/public_html/abc123.php"; 

    runner.exec("php " + phpScriptPath, function(err, phpResponse, stderr) { 
     socket.send(phpResponse); 
    }); 
    }, null, true, 'Asia/Kuala_Lumpur'); 

    myJob.start(); 
}); 

回答

0

你的代碼的問題是你每秒鐘爲每個用戶啓動php。這將很快需要很多CPU。您應該運行一次PHP,並將結果發送給所有客戶端。

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
var cronjob = require('cron').CronJob; 
var runner = require("child_process"); 

var myJob = new cronjob('* * * * * *', function() { 
    var phpScriptPath = "/home/domain/public_html/abc123.php"; 
    runner.exec("php " + phpScriptPath, function(err, phpResponse, stderr) { 
     io.send(phpResponse); 
    }); 
}, null, true, 'Asia/Kuala_Lumpur'); 

myJob.start(); 
+0

好的,謝謝你的建議。但是我也使用了一些控制(當cron作業沒有完成最後一秒的運行時運行php)的免費內存代碼。希望它不會太快,以使用更多的CPU與內存。 – Jun