1

backbone.js でライブ コレクションを保持するための最適化されたソリューションを見つけるために、インターネットを何日も検索しました。仮想ルーム (チャット ルームなど) を考えて、そのルームに誰がいるかを示したいと思いました。現在、2秒ごとにコレクションを取得し、新しいユーザー(私の場合はプレーヤー)をリストビューに追加していますが、機能していますが、トラフィックと何も返さない無駄なajaxリクエストのすべてが怖いです。

ここに私のバックボーンスクリプトがあります:

App.players = new App.Collections.Players;
waitingUserList = new App.Views.WaitingPlayers({ collection: App.players });

setInterval(function() {
    App.players.fetch({
        success: function(collection) {
            collection.each(function(player) {
                if (player.get('added') == 0) {
                    player.set('added', 1);
                    player.save();
                }
            });
        },
    });
}, 2000);

$('div.waiting-list').append(waitingUserList.el);

と私のPHPコード(私はlaravel 3を使用しています):

public function get_index($gid)
{
    $players = Game::find($gid)->players()->get();
    if (!empty($players)) {
        return Response::eloquent($players);
    } else {
        return false;
    }
}

呼び出されたときにcollection.fetch()、新しいレコードがデータベースに追加されるまで待機し、サーバーが ajax 要求に応答する方法はありますか。

PS私はhtml5 websockets
PSSを使用したくありません。これは私の最初のバックボーン経験です。どこかで間違っていたり、何か愚かなことを言っていたら、ご容赦ください :D

前もって感謝します

4

1 に答える 1

1

あなたがしていることは、ポーリングと呼ばれます。すでに述べたように、それはあまりうまくスケーリングしません。彗星のような解を探す必要があります。それはすべてバックエンドに依存します。たとえば、Apache はこの点でうまく機能しません ( Using comet with PHP? )。

ニーズにもよりますが、web ソケットと古いブラウザーのフォールバックを実装する node.js と socked.io をお勧めします。既存のコードとやり取りしたい場合は、メインの Web サーバーでプロキシを使用します。

于 2013-04-18T20:21:15.193 に答える