【问题标题】:How to prevent useless ajax request when polling collections in backbone.js?在backbone.js中轮询集合时如何防止无用的ajax请求?
【发布时间】:2013-04-08 01:15:12
【问题描述】:

我已经在互联网上搜索了好几天,以找到一个优化的解决方案,用于在主干.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

提前致谢

【问题讨论】:

标签: php ajax backbone.js laravel backbone.js-collections


【解决方案1】:

您所做的称为投票。正如您已经提到的,它的扩展性不是很好。您应该寻找类似彗星的解决方案。这完全取决于您的后端。例如 Apache 在这方面做得不是很好 (Using comet with PHP?)。

取决于您的需求,但我会推荐 node.js 和 socked.io,它们实现了 Web 套接字和旧浏览器的后备。如果您想与现有代码进行交互,请在主 Web 服务器上使用代理。

【讨论】:

  • 我找到了 ratchet (socketo.me),它似乎是我需要的,我阅读了教程,但它对我来说太复杂了,所以我认为最好使用 node.js和 socket.io,因为正如您提到的,它具有旧版浏览器的后备功能。谢谢你的回答
猜你喜欢
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多