我有一个Backbone应用程序,它有一个名为Links
的集合。 Links
映射到{API {1}}的REST API URI。
API将为用户提供最新的链接。但是,我有一个系统,当用户点击此API时,它将向消息队列添加一个作业,请求更新数据库中的链接。
当这项工作完成后,我会推送到Backbone集合的新链接。
我该怎么做?在我看来,我有两个选择:
如果我使用WebSockets,我不确定将其集成到我的Backbone集合中的最佳方式,以便它与REST API一起工作。
目前我的Backbone系列看起来像这样:
/api/links
我不确定如何启用Backbone集合来处理AJAX 和 WebSockets。我是否继续使用默认的Backbone.sync进行CRUD Ajax操作,然后手动处理单个WebSocket连接?在我看来:
var Links = Backbone.Collection.extend({
url: '/api/links'
});
我应该如何实现我的实时需求,从上面的选项或您拥有的任何其他想法?请提供代码示例以提供一些背景信息。
答案 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为我们使用的方法提供了很好的启动。