覆盖socket.io的Backbone.sync

时间:2013-01-14 20:52:06

标签: node.js backbone.js socket.io

我正在开发基于socket.io的服务器/客户端连接而不是ajax。 客户端使用Backbone,我用一个覆盖了Backbone.sync函数 我自己的一半

  Backbone.sync = function (method, collection, options) {
    // use the window.io variable that was attached on init 
    var socket = window.io.connect('http://localhost:3000');
    // emit the collection/model data with standard ajax method names and options
    socket.emit(method,{collection:collection.name,url:collection.url});
    // create a model in the collection for each frame coming in through that connection 
    socket.on(collection.url,function(socket_frame){
      collection.create(socket_frame['model']);
    })
  };

我只是通过附加到window.io的套接字来代替ajax调用 全球变种服务器侦听那些发射并基于模型URL,我不想改变那种行为,并且我在每个被发现的帧内使用默认的crud方法名称(read,patch ...)。它背后的逻辑(它有点远,但谁知道)如果客户端不支持Websockets,我可以轻松回退到默认的jQuery ajax。我将原始的Backbone.sync附加到var,所以当没有websocket可用时,我可以将相同的参数传递给它。

所有伟大的行为都正常,服务器回答客户端事件。然后,服务器在一个连接中将每个模型数据作为单独的websocket框架发出。 我将Network / Websocket过滤器中的帧视为一个(并发/已建立)连接 事情似乎正在发挥作用

目前,该功能假定我传递的是集合,而不是模型。

问题:

  • 这种方法对你好吗?

  • 如何以正确的方式在Backbone中对'success'和'failure'等使用socket.io回调,这样我就不必“手动”调用collection.create函数?

  • 为模型/集合建立不同的并发连接或使用已建立的连接是否更好?

0 个答案:

没有答案