ajaxの代わりにsocket.ioベースのサーバー/クライアント接続で作業しています。クライアントは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']);
})
};
ajax呼び出しの代わりに、window.ioグローバル変数に接続されたソケットを介して送信するだけです。サーバーはそれらのemitをリッスンし、モデルのURLに基づいて、その動作を変更したくないので、各emitフレーム内でデフォルトのcrudメソッド名(read、patch ...)を使用します。その背後にあるロジック(少し遠い考えですが、誰が知っていますか)は、クライアントがWebsocketをサポートしていない場合、デフォルトのjQueryajaxに簡単にフォールバックできるというものです。元のBackbone.syncをvarにアタッチして、WebSocketが利用できないときに同じ引数をvarに渡すことができるようにしました。
その素晴らしさはすべて適切に代用し、サーバーはクライアントイベントに応答します。サーバーは、各モデルデータを1つの接続で個別のWebSocketフレームとして送信します。ネットワーク/WebSocketフィルターのフレームが1つの(同時/確立された)接続として表示され、動作しているようです
現在、この関数は、モデルではなくコレクションを渡すことを前提としています。
質問:
そのアプローチは大丈夫ですか?
Backboneの「success」や「failure」などでsocket.ioコールバックを正しい方法で使用して、collection.create関数を「手動で」呼び出す必要がないようにするにはどうすればよいですか?
モデル/コレクションに対して異なる同時接続を確立するか、代わりにすでに確立されている接続を使用する方が良いですか?