如何使用实时统计数据自动更新div?

时间:2012-12-10 14:32:51

标签: node.js socket.io

我是新手,我需要你的帮助来解决这个问题。

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套接字。

我测试了几种变体:

  • 放入setInterval服务器端,情况更糟。
  • 一旦客户连接或打开一个充电其他等广告,就会从fonctioner触发....

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的方法?

非常感谢你的帮助(对不起我的英语)

0 个答案:

没有答案