【发布时间】:2013-03-14 14:27:13
【问题描述】:
我有一个 Backbone 应用程序,它有一个名为 Links 的集合。 Links 映射到 /api/links 的 REST API URI。
API 将为用户提供最新链接。但是,我有一个系统,当用户点击这个 API 时,它会向消息队列添加一个作业,请求更新数据库中的链接。
当这项工作完成后,我会推送到 Backbone 集合的新链接。
我应该怎么做?在我看来,我有两个选择:
- 从 Backbone 集合中,长轮询 API 以获取新链接
- 设置 WebSockets 以在作业完成时向集合发送“消息”,同时发送新数据
- 为我的应用程序废弃 REST API,只为所有内容使用 WebSocket,因为我以后可能会有更多的实时需求
带有 REST API 的 WebSockets
如果我使用 WebSockets,我不确定将它集成到我的 Backbone 集合中以便它与 REST API 一起工作的最佳方法。
目前我的 Backbone 收藏看起来像这样:
var Links = Backbone.Collection.extend({
url: '/api/links'
});
我不确定如何启用 Backbone 集合来处理 AJAX 和 WebSocket。我是否继续使用默认的 Backbone.sync 进行 CRUD Ajax 操作,然后手动处理单个 WebSocket 连接?在我看来:
var Links = Backbone.Collection.extend({
url: '/api/links',
initialize: function () {
var socket = io.connect('http://localhost');
socket.on('newLinks', addLinks)
},
addLinks: function (data) {
// Prepend `data` to the collection
};
})
问题
我应该如何根据上述选项或您的任何其他想法来实现我的实时需求?请提供代码示例以提供一些上下文。
【问题讨论】:
-
@PaulHoenecke 我有,但我不确定如何首先通过 WebSockets 制作集合“获取链接”,然后当有更多可用时(当工作完成时),“获取更多链接。”如果你得到我? Backbone.ioBind 似乎将 CRUD 操作映射到 Sockets,但我仍然不确定我的集合将如何寻找我的用例(在原始帖子中描述)。
-
@PaulHoenecke 刚刚意识到我应该如何使用文档中显示的
serverChange方法来做到这一点。但是,这意味着我需要将整个 API 转移到 WebSockets。这是好事吗?! -
不确定您是否需要。如果您不使用替换
sync,您可以继续使用 REST API 进行普通 CRUD。然后侦听您从服务器发出的一些套接字事件,并可能调用myCollection.update(dataFromSocket),其中myCollection以前是通过REST 使用正常获取同步的。
标签: api rest backbone.js websocket socket.io