0

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関数を「手動で」呼び出す必要がないようにするにはどうすればよいですか?

  • モデル/コレクションに対して異なる同時接続を確立するか、代わりにすでに確立されている接続を使用する方が良いですか?

4

0 に答える 0