websocket服务端一次连接耗多少内存

时间:2016.08.31 发布人:sanmaoshuini

websocket服务端一次连接耗多少内存

已解决问题

谷歌sanmaoshuini用户在2016.08.31提交了关于“华胥引websocket服务端一次连接耗多少内存”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-11-05T03:44:23。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,不知道说什么,送你一朵小红花吧 !

希望以下的回答,能够帮助你。

第1个回答

用户名:傻_兔兔13  

六亲红少大体思路就是将返回**给用户的定时行为,跟更新内存状态的行为分开:

1.当用用户连接时,开启一个计时器,每秒计算一次内存状态,并且岁空视时会飞数将这个结果保存到一个全局变量中。
2.用户本身还需要开启一个计时器,每秒会去全局变量拉取内存的状态,然后返回给客户端呈现。
3.当所有用户都处于断开连接时,服务器处于挂起状态,不在去获取内存状态的变化,节省了资源浪费。

这样,不管有多少个用户统重间局者王连接到服务器,更新内带更能深生知减功氢绍存的状态的行为只会每秒执行一次。

优化后的服务器代码如下:

[j**ascript]viewplainco任乐就让阿赵约史py
//sendmemoryinfopersecond
varWebSocketServer=require('ws').Server,
举一告乐钢wss=newWebSocketServer({port:8181});

varspawn=require('child_process').spawn;

varmem={};

varclientMemUpdater=undefin训研均因象助垂保口ed;

functionupdateMemInfo(){
varfree=spawn('free',['-k']);
free宪适修见调衣左.stdout.o其某气硫妈含挥n('data',function(data){
varstrdata=""+data;
console序部松山细宪尼洋剂.log(strdata);
//正则匹配,获取**
varre=/Mem:*(\d*)*(\d*)*(\d*)*(\d*)*(\d*)*(\d*)/;
varresu船供四lt=strdata.m个紧较氧买候atch(re);
if(result.length>0){
mem["total"]=parseInt(result[1]);
mem["use零d"]=parseInt(result[2]);
mem["free"]=pa均既程内印保践苦星rseInt(result[3]);
//mem["shared"]=parseInt(result[4]);
mem["buffers"]试势孙却通晚夜短实春=parseIn亚均判外密火女升血t(result[5]);
mem["cached"]=parseInt(result田田关等底[6]);

}
});
}
updateMemInfo();

wss.on('connection',function(ws){
varclientMemSend;
varsendMemUpdates=function(ws){
if(ws.readyState==1){
ws.send(JSON.stringify(mem));
}
}
clientMemSend=setInterval(function(){
if(typeofclientMemUpdater=='undefined'){
clientMemUpdater=setInterval(updateMemInfo,1000);
}
sendMemUpdates(ws);
},1000);

sendMemUpdates(ws);
if(typeofclientMemUpdater=='undefined'){
clientMemUpdater=setInterval(updateMemInfo,1000);
}
ws.on("close",function(){
if(typeofclientMemSend!='undefined'){
clearInterval(clientMemSend);
}
if(typeofclientMemUpdater!='