我是新手,我需要你的帮助来解决这个问题。
Ojectif:使用实时统计信息自动更新div
我们有一个在线广告网站,这个网站向您显示实时连接的数量,广告视图等...直到今天我做了一个setInterval,它启动了一个jquery函数来更新div。这一切都很好,只有消耗不必要的连接的问题。 来自nodejs,伟大的工具..除了它杀死服务器。 (可能是因为我用错了)
我是这样做的:
客户方:
<script type="text/javascript" src="http://10.0.0.10:1337/socket.io.js"></script>
<script type="text/javascript">
(function ($)
{
if (typeof (io) != "undefined")
{
var socket = io.connect("http://10.0.0.10:1337/socket.io.js");
setInterval(function ()
{
socket.emit("cron_showcompteur",
{
ssid: "*SSID_ID*",
id_website: 1
});
}, 5 * 1000);
socket.on("showinfo", function (obj)
{
$("#" + obj.divdest).html(obj.result);
});
}
})(jQuery);
客户端每隔5秒就通过其SSID向cron_showcompteur启动套接字。
服务器端:
var initConf = require('./conf');
var http = require('http');
var util = require('util');
var os = require('os');
var Memcached = require('memcached');
var memcached = new Memcached(util.format('%s:%s', initConf.objConf.memcache_ip, initConf.objConf.memcache_port));
....
io.sockets.on('connection', function (socket)
{
socket.on('cron_showcompteur', function (obj)
{
var loadAvg = os.loadavg();
if (typeof (obj.ssid) == 'undefined') return;
socket.join(obj.ssid)
if (loadAvg[0] < 3)
{
memcached.get(["nombre_visite_journee", util.format('annonces_ajoutees_journee_%d', obj.id_website)],
function (err, result)
{
if (err) return;
if (typeof (result) == 'boolean') return;
for (var i in result)
{
io.sockets. in (obj.ssid).emit('showinfo',
{
divdest: i,
result: addCommas(result[i])
});
}
});
}
});
});
总结:
此人连接到该网站,并通过其ID网站发送其SSID 一旦初始化的nodejs套接字创建了一个带有SSID的房间,客户端每隔5秒就会询问统计信息和nodejs使用“showinfo”在div中发送结果
当服务器(专用于nodejs的服务器)CPU上升到100%时,当600/700连接到1000时,这很有效,网站工作的任何结果都无法再初始化服务器和站点工厂上的nodejs套接字。
我测试了几种变体:
Memeched统计数据在PHP上更新
我对制作的缺点有疑问 - 我们需要创建一个用户房,它看起来很大......因为数据不是私密的。
我想避免长池,我喜欢套接字的想法。
服务器在连接到nodejs的932上的CPU为100%
calou3 root @: ~ # netstat-tanpu | grep node | awk {'print $ 5'} | cut-f 1-d "" | uniq-c | sort-nnetstat-tanpu && | grep node | wc-l
932
目前服务器是412(重启后节点),CPU为3%,平均值为0
您能否告诉我一种在不破坏服务器的所有无线客户端上自动更新DIV的方法?
非常感谢你的帮助(对不起我的英语)