我是名单上的新手,我需要你的帮助来解决这个问题。
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的cons时,这非常有用,因为站点工作的任何结果都不再能够初始化nodejs套接字服务器和站点工厂。
我测试了几个变种:
- 把 setInterval 放在服务器端,那就更糟了。
- 一旦客户连接或打开向其他收费等的广告,从连接器到触发......
Memeched 统计信息在 PHP 上更新
我对我们需要创建一个用户房间的缺点表示怀疑,这似乎很大......因为数据不是私人的。
我想避免long-pooling,我喜欢socket的想法。
在连接到 nodejs 的 932 之后,服务器处于 100% CPU
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 的方法?
非常感谢您的帮助(对不起我的英语)