Backbone.sync - 使用ajax和Socket.IO/WebSockets进行集合

时间:2013-03-14 14:27:13

标签: api rest backbone.js websocket socket.io

我有一个Backbone应用程序,它有一个名为Links的集合。 Links映射到{API {1}}的REST API URI。

API将为用户提供最新的链接。但是,我有一个系统,当用户点击此API时,它将向消息队列添加一个作业,请求更新数据库中的链接。

当这项工作完成后,我会推送到Backbone集合的新链接。

我该怎么做?在我看来,我有两个选择:

  • 从Backbone集合中,长时间轮询API以获取新链接
  • 设置WebSockets以在作业完成时向集合发送“消息”,并使用它发送新数据
  • 为我的应用程序废弃REST API,只使用WebSockets来处理所有事情,因为我可能会在以后有更多的实时需求

带有REST API的WebSockets

如果我使用WebSockets,我不确定将其集成到我的Backbone集合中的最佳方式,以便它与REST API一起工作。

目前我的Backbone系列看起来像这样:

/api/links

我不确定如何启用Backbone集合来处理AJAX WebSockets。我是否继续使用默认的Backbone.sync进行CRUD Ajax操作,然后手动处理单个WebSocket连接?在我看来:

var Links = Backbone.Collection.extend({
  url: '/api/links'
});

问题

我应该如何实现我的实时需求,从上面的选项或您拥有的任何其他想法?请提供代码示例以提供一些背景信息。

2 个答案:

答案 0 :(得分:1)

不用担心! Backbone.WS让你受到保护。

您可以初始化WebSocket连接,如:

var ws = new Bakcbone.WS('ws://exmaple.com/');

将模型绑定到它:

var model = new Backbone.Model();
ws.bind(model);

然后此模型将侦听类型为ws:message的消息事件,您可以调用model.send(data)通过该连接发送数据。

当然,收藏也是如此。

Backbone.WS还提供了一些工具,用于将类似自定义REST的API映射到模型/集合。

答案 1 :(得分:0)

我的公司有一个完全基于Socket.io的解决方案,使用主干,主要是因为我们希望我们的应用程序更新"当在另一个用户屏幕上实时进行更改时,gui。

简而言之,它是一种蠕虫病毒。 Socket.IO运行良好,但它也打开了很多你可能不感兴趣的门。 Backbone事件变得非常糟糕,因为它们与ajax事务紧密相关......你有效地覆盖了默认行为。我们更好的打嗝之一是删除,因为我们的套接字响应不是改变的模型,而是整个集合,例如。我们的解决方案确实比大多数解决方案更进一步,因为事务是通过DDL进行的,该DDL专门设置为在我们现在和将来需要能够与之通信的许多设备上通用。

如果你选择ioBind路径,请注意,与非套接字流量相比,您将使用不同的方法进行更改事件(如果混合使用)这是该方法的一大缺点,标准的东西,如"改变"成为"更新"例如,以避免碰撞。在深夜调试或新开发人员加入团队时,它会变得非常混乱。出于这个原因,我更喜欢是插座还是不插座,而不是组合。到目前为止套接字一直很好,而且速度很快。

我们使用一个基本功能来完成繁重工作,还有其他几个扩展此基础的功能,以便为我们提供所需的交易功能。

This article为我们使用的方法提供了很好的启动。