骨干.sync -集合使用ajax以及Socket.IO/WebSockets



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

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

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

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

  • 从Backbone集合中,长轮询API以获取新链接
  • 设置WebSockets在任务完成时向集合发送"消息",并发送新数据
  • 废弃我的应用程序的REST API,只是使用WebSockets的一切,因为我可能有更多的实时需求以后的线

带有REST API的WebSockets

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

现在我的Backbone集合是这样的:

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

我不确定如何使主干集合处理AJAX WebSockets。我是否继续使用默认的Backbone。同步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
  };
})

我应该如何实现我的实时需求,从上面的选项或任何其他想法你有?请提供代码示例以给出一些上下文

别担心!骨干。WS帮你搞定了。

你可以这样初始化WebSocket连接:

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

并将Model绑定到它,如:

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

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

当然集合也是如此。

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

我公司有一个完整的Socket。基于IO的解决方案使用骨干,主要是因为我们希望我们的应用程序"更新"GUI时,另一个用户的屏幕上的变化实时。

简而言之,这是一个棘手的问题。套接字。IO工作得很好,但它也打开了很多你可能不感兴趣的门。骨干事件变得非常不正常,因为它们与ajax事务紧密地联系在一起……你有效地覆盖了默认行为。我们的一个较好的问题是删除,因为我们的套接字响应不是被更改的模型,而是整个集合。我们的解决方案确实比大多数解决方案走得更远,因为事务是通过DDL进行的,该DDL是专门设置为在许多设备上通用的,我们现在和将来都需要能够与之通信。

如果你选择ioBind路径,注意你将使用与非套接字流量不同的方法来处理更改事件(如果你混合和匹配)。这是该方法的最大缺点,例如,像"change"这样的标准内容变成了"update",以避免冲突。在深夜调试或新开发人员加入团队时,情况会变得非常混乱。出于这个原因,我宁愿要么使用套接字,要么不使用,而不是组合使用。到目前为止,套接字还不错,而且速度快得吓人。

我们使用一个基本函数来完成繁重的工作,并且有几个其他的扩展这个基本函数来提供我们需要的事务功能。

本文为我们使用的方法提供了一个很好的开端。

相关内容

  • 没有找到相关文章