2016-03-03 3 views
1

Я хочу знать, правилен ли следующий скрипт JS (серверная сторона) или нет, потому что он требует слишком много ресурсов ЦП. Работа cron работу таким образом.Node.js - работа cron с процессом PHP

Когда сервер запускает 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

Хорошо, спасибо за совет. Но я также сделал свободный код памяти с некоторым контролем (не будет запускать php, когда задание cron не завершает работу в последнюю секунду) из этого php. Надеюсь, он не слишком быстро использует слишком много процессора с памятью. – Jun

Смежные вопросы