私はこのリストに初めて参加しました。この問題を解決するにはあなたの助けが必要です。
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 を自動的に更新する方法を教えてください。
助けてくれてありがとう(そして私の英語でごめんなさい)