主干网.js使用本机 websocket 进行同步



我正在尝试用通过WebSockets同步的函数覆盖默认的Backbone.sync函数。到目前为止,我已经设法使用以下代码成功向服务器发送了获取请求,但我不知道如何捕获响应。

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

有没有关于如何实现我想要做的事情的例子?

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

您可以查看 Backbone.WS 项目,了解如何通过本机 WebSocket 使用骨干资源。

我们使用的技术涉及在socket.onmessage处理程序中使用 Backbone-relational 和 Model.findOrCreate({id: response.id}),以便在找到更新时通过简单的model.set()调度更新。

在我们没有 ID 的情况下,我们使用仅限客户端的临时 ID,API 旨在忽略这些临时 ID 并按原样返回,以便我们可以区分和跟踪响应。

相关内容

  • 没有找到相关文章

最新更新