Hello,

I'm new to the list, I need your your help to solve this problem.

Ojectif: Automatically update the div with live stats

We have a website for online ads, this site shows you the number of live
connected, ad views etc ... until today I did a setInterval which launched
a jquery function to update the div. This all works well, only problem that
consumes unnecessary connections.
And comes nodejs, great tool .. except it kills the server. (probably
because I use it wrong)

Here's how I do it:

The client side:

<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);

The client initiates the socket every 5 seconds to cron_showcompteur with
its SSID.

Server side:

..
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])
                    });
                }
            });
        }
    });
});

In summary:

The person connects to the site, sending its SSID it with his ID website
Once initialized nodejs socket created a room with its SSID, every 5
seconds the client asks the stats and nodejs sending the result in the div
using the "showinfo"

This works great when you're 600/700 connected to cons up to 1000 as soon
as the server (a server dedicated to nodejs) CPU rises to 100%, the result
of anything the site works no longer able to initialize the nodejs socket
on the server and site plant.

I tested several variants:

- Put the setInterval server side, it is worse.
- From fonctioner to trigger as soon as a client connects or opens an ad
that charging other etc ....

Memeched stats are updated on the PHP

I have a doubt about the cons made ??that we need to create a user-room, it
seems big ... because the data are not private.

I would like to avoid the long-pooling, I like the idea of ??the socket.

Could you advise me a method to automatically update the DIV on all
wireless clients that do not crash the server?

Thank you very much for your help (and sorry for my english)

-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

Reply via email to