1

我已经在互联网上搜索了几天,以找到一个优化的解决方案,用于在骨干网中进行实时集合。想想一个虚拟房间(例如聊天室),我想显示那个房间里的人。现在我每 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

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

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

于 2013-04-18T20:21:15.193 回答