デフォルトの Backbone.sync 関数を、WebSocket 経由で同期する関数でオーバーライドしようとしています。これまでのところ、以下のコードを使用してフェッチ要求をサーバーに正常に送信できましたが、応答をキャッチする方法がわかりません。
ソケットの onmessage イベント ハンドラーを毎回リセットすることを提案する人を見てきましたが、一度に大量のデータが要求された場合 (1 つの要求に時間がかかる場合)、応答が同期しなくなる可能性があると思わずにはいられません。返答する)。
私がやろうとしていることを達成する方法の例はありますか?
var app = app || {};
function fnSync (sMethod, oModel, oOptions) {
var bSuccess,
sResponse;
bSuccess = false;
switch (sMethod) {
case "read":
if (oModel.id !== undefined) {
app.socket.send(JSON.stringify({
"method": "get",
"url": oModel.url,
"id": oModel.get("_id")
}));
} else {
app.socket.send(JSON.stringify({
"method": "get",
"url": oModel.url
}));
}
bSuccess = true;
break;
default:
throw "Backbone.sync doesn't know how to " + sMethod;
bSuccess = false;
break;
}
(bSuccess) ? oOptions.success() : oOptions.error();
}
(function () {
app.socket = new WebSocket("ws://localhost:3001");
app.socket.onopen = function () {
Backbone.sync = fnSync;
app.router = new app.Router();
Backbone.history.start();
}
app.socket.onmessage = function (oMessage) {
//console.log("Socket message", oMessage.data);
}
})();