关于PHP和nodejs的问题

Mr_liangGG 2016-03-03 04:30:49

ini_set("display_errors", "On");
error_reporting(E_ALL | E_STRICT);
header("Access-Control-Allow-Origin: *");

$extens='2933|2934|2935|2936|2937|2938|2939|2940|2925|2922|2721|2913|2916|2790|2789|2788|2712|2713|2722|2717|2714|2716|2684|2687|2900';
$extens=" | grep -E '$extens'";
$command="rasterisk -x 'core show hints'".$extens;
$exten=get_exten_status($command);
$work=get_exten_work($exten);
if(!empty($work)){
$work=" | grep -E '$work'";
$command="rasterisk -x 'core show channels verbose'| grep -w 'Dial'".$work;
$exten=get_exten_other($exten,$command);
$work=get_exten_work($exten);
if(!empty($work)){
$work=" | grep -E '$work'";
$command="rasterisk -x 'core show channels verbose' | grep -w 'Transferred' | grep 'dial'".$work;
$exten=get_exten_other($exten,$command);
}
}

echo json_encode($exten);


/*
获取工作中的分机
*/
function get_exten_work($exten){
$work='';
foreach ($exten as $key => $value) {
if($value['status']=='Ringin'||$value['status']=='InUse'){
if(!isset($value['other'])){
$work.=$value['name'].'|';
}
}
}
$work=substr($work, 0,-1);
return $work;
}
/*
获取分机状
*/
function get_exten_status($command){
exec($command,$res);
$exten=array();
$i=0;
foreach ($res as $key => $value) {
$f=strpos($value, 'SIP/');
if($f===false){
continue;
}else{
$exten[$key]['name']=substr($value, $f+4,4);
if(strpos($value,'Unavailable')){
$exten[$key]['status']='Unavailable';
}else if(strpos($value,'Idle')){
$exten[$key]['status']='Idle';
}else if(strpos($value,'Busy')){
$exten[$key]['status']='Busy';
}else if(strpos($value,'Ringin')){
$exten[$key]['status']='Ringin';
}
else if(strpos($value,'InUse')){
$exten[$key]['status']='InUse';
}/*
else if(strpos($value,'Hold')){
$exten[$key]['status']='Hold';
}*/
else{
$exten[$key]['status']='undefined';
}
$i++;
}
}
return $exten;
}
/*
获取与分机通话的对方号
*/
function get_exten_other($exten,$command){
exec($command,$res);
$work=array();
foreach ($exten as $key => $value) {
foreach ($res as $k => $val) {
$f=strpos($val, $value['name']);
if($f===false){
continue;
}else{
preg_match_all('/SIP\/(\d+).+SIP\/\S+\/(\d+)|.+SIP\/(\d+)\S+\s+(\d+)/i', $val, $temp);
foreach ($temp as $i => $v) {
if(isset($v[0])&&$v[0]!=''&&$v[0]!=$value['name']){
if(strlen($v[0])>8){
$v[0]=substr($v[0], -8);
}
$exten[$key]['other']=$v[0];
}
}
}
}
}
return $exten;
}


var app = require('express')();
var http = require('http').Server(app);
var request = require('request');
var io = require('socket.io')(http);
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

io.on('connection',function(socket){
var obj;
setInterval(function(){
request('https://192.168.80.100/extenStatus.php', function (error, response, body) {
request('https://192.168.10.187/extenStatus.php',function(err,res,b){
request('https://192.168.80.108/extenStatus2.php',function(err2,res2,b2){
if (!error && !err && !err2 && response.statusCode == 200 && res.statusCode==200 && res2.statusCode==200) {
body=isJSON(body);
b=isJSON(b);
b2=isJSON(b2);
if(body!=false&&b!=false&&b2!=false){
temp=merge_JSON(body,b);
obj=merge_JSON(temp,b2);
}else if(body){
obj=body;
}else if(b){
obj=b;
}else if(b2){
obj=b2;
}else{
obj=null;
}
}else if(!error && response.statusCode==200){
body=isJSON(body);
if(body!=false){
obj=body;
}else{
obj=null;
}
}else if(!err && res.statusCode==200){
b=isJSON(b);
if(b!=false){
obj=b;
}else{
obj=null;
}
}else if(!err2 && res2.statusCode==200){
b2=isJSON(b2);
if(b2!=false){
obj=b2;
}else{
obj=null;
}
}else{
obj=null;
}
io.emit('exten_status',JSON.stringify(obj));
});
});
});
},2000);
});


http.listen(3000);

merge_JSON=function(a,b){
var res=new Array();
for(var i=0;i<a.length;i++){
res[i]=a[i];
}
for (var j = 0; j < b.length; i++,j++) {
res[i]=b[j];
}
return res;
}

isJSON=function(json){
try{
json=JSON.parse(json);
}catch(e){
return false;//转化失败捕捉错误返回false
}
return json;//转换成功则返回true
}

问题是nodejs request模块引用php文件,然后接收json过来的值,这样虽然能实现功能,但是这样的代码性能并不是很好,在linux服务器运行的,cpu占用率百分之20%,内存一直增加,不会降下来,导致有时候页面会卡死。

我觉得node每次都要setInterval不停的调用,很耗性能,不知道论坛里的大神是否能帮我解决这个问题,本人对node很陌生,毕竟是基于PHP开发的。
...全文
101 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧