我正在处理基于 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 方法名称(读取、补丁...)。它背后的逻辑(有点远,但谁知道)如果客户端不支持 Websockets,我可以轻松地回退到默认的 jQuery ajax。我将原始的 Backbone.sync 附加到一个 var 上,这样当没有可用的 websocket 时,我可以将相同的参数传递给它。
所有这一切都是伟大的表现正确,服务器响应客户端事件。然后,服务器将每个模型数据作为单独的 websocket 帧发送到一个连接中。我将 Network/Websocket 过滤器中的帧视为一个(并发/已建立)连接,并且事情似乎正在工作
目前该函数假定我传递一个集合而不是模型。
问题:
这种方法适合你吗?
如何以正确的方式在 Backbone 中的“成功”和“失败”等上使用 socket.io 回调,这样我就不必“手动”调用 collection.create 函数?
为模型/集合建立不同的并发连接还是使用已经建立的连接更好?