2016-03-03 103 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