我正在开发基于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函数?
为模型/集合建立不同的并发连接或使用已建立的连接是否更好?