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

8 api rest websocket backbone.js socket.io

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

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'
});
Run Code Online (Sandbox Code Playgroud)

我不确定如何启用Backbone集合来处理AJAX WebSockets.我是否继续使用默认的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
  };
})
Run Code Online (Sandbox Code Playgroud)

问题

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

bpe*_*n76 0

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

简而言之,这是一罐蠕虫。Socket.IO 工作得很好,但它也打开了很多你可能不感兴趣看到后面的门。主干事件变得非常不正常,因为它们与 ajax 事务紧密相关......您实际上覆盖了默认行为。我们更好的问题之一是删除,因为我们的套接字响应不是更改的模型,而是整个集合。我们的解决方案确实比大多数解决方案更进一步,因为事务是通过 DDL 进行的,该 DDL 专门设置为在我们现在和将来需要能够通信的许多设备上通用。

如果您确实采用 ioBind 路径,请注意,与非套接字流量相比,您将使用不同的方法来处理更改事件(如果您混合和匹配),这是该方法的一大缺点,像“更改”这样的标准内容会变成“更新”例如以避免冲突。在深夜调试或有新开发人员加入团队时,这可能会变得非常混乱。出于这个原因,我更喜欢要么使用套接字,要么不使用套接字,而不是两者的组合。到目前为止,套接字一直很好,而且速度快得吓人。

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

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