1

私はこのリストに初めて参加しました。この問題を解決するにはあなたの助けが必要です。

Ojectif: div をライ​​ブ統計で自動的に更新する

オンライン広告用の Web サイトがあります。このサイトには、ライブ接続数、広告ビューなどが表示されます。今日まで、jquery 関数を起動して div を更新する setInterval を実行しました。これはすべてうまく機能しますが、不要な接続を消費する唯一の問題です。そして、素晴らしいツールである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])
                });
            }
        });
    }
});

});

要約すれば:

ユーザーはサイトに接続し、その SSID を自分の ID Web サイトとともに送信します 初期化された nodejs ソケットがその SSID でルームを作成すると、5 秒ごとにクライアントが統計情報を要求し、nodejs は「showinfo」を使用して div で結果を送信します

これは、サーバー (nodejs 専用のサーバー) の CPU が 100% に上昇するとすぐに 1000 までの cons に 600/700 接続している場合にうまく機能し、サイトが動作するすべての結果は、nodejs ソケットを初期化できなくなります。サーバーとサイトプラント。

私はいくつかの変種をテストしました:

  • setInterval サーバー側に置くと、さらに悪化します。
  • クライアントが接続したり、他の課金などの広告を開いたりするとすぐに、ファンクショナーからトリガーまで....

Memeched 統計は PHP で更新されます

ユーザールームを作成する必要があるという短所に疑問があります。データがプライベートではないため、大きく見えます。

ロングプーリングを避けたいのですが、ソケットのアイデアが好きです。

サーバーは、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 を自動的に更新する方法を教えてください。

助けてくれてありがとう(そして私の英語でごめんなさい)

4

0 に答える 0