Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用本机WebSocket进行主干.js同步_Javascript_Backbone.js_Websocket_Sync - Fatal编程技术网

Javascript 使用本机WebSocket进行主干.js同步

Javascript 使用本机WebSocket进行主干.js同步,javascript,backbone.js,websocket,sync,Javascript,Backbone.js,Websocket,Sync,我试图用一个通过WebSocket同步的函数来覆盖默认的Backbone.sync函数。到目前为止,我已经成功地使用下面的代码向服务器发送了一个fetch请求,但我不知道如何捕获响应 我见过有人建议每次重置消息事件处理程序上的套接字,但我忍不住认为,如果一次请求了大量数据(如果一个请求需要很长时间才能响应),这可能会导致响应不同步 有没有关于如何实现我的目标的例子 var app = app || {}; function fnSync (sMethod, oModel, oOptions)

我试图用一个通过WebSocket同步的函数来覆盖默认的Backbone.sync函数。到目前为止,我已经成功地使用下面的代码向服务器发送了一个fetch请求,但我不知道如何捕获响应

我见过有人建议每次重置消息事件处理程序上的套接字,但我忍不住认为,如果一次请求了大量数据(如果一个请求需要很长时间才能响应),这可能会导致响应不同步

有没有关于如何实现我的目标的例子

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);
    }

})();

我们使用的技术包括在
socket.onmessage
处理程序中使用和
Model.findOrCreate({id:response.id})
,以便在找到更新时使用简单的
Model.set()
发送更新

在我们没有ID的情况下,我们只使用客户端临时ID,API设计为忽略这些临时ID并按原样返回,以便我们能够区分和跟踪响应。

您可以查看通过本机WebSocket使用主干资源的