在没有 Socket.io 的 Backbone.js 应用程序中使用 websockets

2024-03-22

我是 Backbone 的新手,我正在尝试构建一个 Backbone 应用程序来实时绘制和映射数据。我实现了一个 websocket 以下this https://github.com/andrewvc/d3-backbone-presentation/blob/master/04_websockets_bb.html示例代码。问题是,我想使用比示例代码更广泛的数据集,如果我理解代码,它只是创建一个模型——单个点数组。我想要一个模型集合,其中每个模型都有纬度、经度和数量(只是一个数值)。

如何实现 websocket,以便当我的后端发送一些 JSON 时,我的应用程序使用这些属性创建一个新模型?我在博客上读到过,我需要重写 Backbone.sync 并实现事件聚合器,但我见过的唯一示例使用了 socket.io。由于我在后端使用的语言/框架,Socket.io 不是一个选项。此外,最终我将把后端切换到另一种也不被socket.io支持的语言,所以我想找到一种更通用的方法来在前端实现websocket,而不涉及像这样的库套接字.io。


我已经找到了一个有效的解决方案来解决我自己的问题。再说一次,我是 Backbone 的新手,所以我不确定这是否是最好的方法 - 我会对有关此解决方案是否遵循最佳实践的反馈感兴趣。该代码基于这个例子 https://github.com/andrewvc/d3-backbone-presentation/blob/master/04_websockets_bb.html作者:安德鲁·乔拉基安。我保留了一些打印语句,当您运行代码时它们会很有帮助。

该代码假设您的后端正在以以下形式发送 JSON 数据{data: "{"lat": latitude, "long": longitude, "amt": amount}"}

// this function opens the websocket and will trigger add_point when
// a new message is received
Stream = function () {
    _.extend(this, Backbone.Events);
    var self = this;

    self.socket = new WebSocket("ws://" + document.domain + ":5000/websocket");
    console.log("Using a standard websocket");

    self.socket.onopen = function(e) {
        self.trigger('open', e);
        console.log('socket opened');
    };

    self.socket.onerror = function(e) {
        self.trigger('error', e);
    };

    self.socket.onmessage = function(e) {
        self.trigger('message', e);
        self.trigger('data', e.data);
        self.trigger('add_point', JSON.parse(e.data));
    };

    self.socket.onclose = function(e) {
        self.trigger('close', e);
        console.log('socket closed');
    };
};  

DataPoint = Backbone.Model.extend({
    defaults: {
        lat: null,
        long: null,
        amt: null
        }
});

DataSet = Backbone.Collection.extend({
    model: DataPoint,
    initialize: function(options) {
        this.stream = options.stream;
        var self = this;
        this.stream.on("add_point", function(pt) {
            self.add( new DataPoint({
                lat: pt.lat,
                long: pt.long,
                amt: pt.amt
            }));
            console.log('updated collection');
            console.log(self.models);
        });
    }
});

MapView = Backbone.View.extend({
    initialize: function(options) {
        this.dataSet = options.dataSet;
    }
});

$(function() {
    var stream = new Stream();
    var dataSet = new DataSet({ stream: stream });
    var mapView = new MapView({ dataSet: dataSet });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在没有 Socket.io 的 Backbone.js 应用程序中使用 websockets 的相关文章

  • Socket.IO中的跨域连接

    是否可以跨域方式使用Socket IO 如果是这样 怎么办 网络上提到了这种可能性 但没有给出任何代码示例 引用socket io 常见问题解答 http socket io faq Socket IO支持跨域连接吗 当然 在每个浏览器上
  • Rails:backbone-on-rails gem-

    尝试按照 Ryan Bates Backbone js 教程构建抽奖应用程序 但我已经遇到了第一部分代码的问题 在 application js 的 init 函数中 他初始化了 Raffler 路线的新实例 该实例应该触发警报 主页 但我
  • 我可以使用单个 websocket 服务器同时打开 2 个端口吗

    我是 websocket 编程的新手 目前我正在开发一个简单的 websocket 服务器 使用 c 可以响应 websocket 客户端 我设法在单个端口上使用 1 个客户端和 1 个服务器 我想知道是否可以打开 2 个端口 以便不同的客
  • Backbone.View“el”混淆

    视图应该如何el被处理 必须设置它 否则事件不会触发 请参阅here https stackoverflow com questions 4909564 backbone js why isnt this event bound 但它应该是
  • Websockets:npm 中的 Rachet 和 autobahn 兼容吗?

    我正在尝试Ratchet PHP 库 http socketo me 特别是 我一直在尝试整合他们的推式整合 http socketo me docs push演示到 React 应用程序中 他们的演示参考看似一次性的 autobahn J
  • Backbone js 并使用 fetch() 用数据填充模型

    我正在 Backbone js 中工作 并尝试使用 fetch 用数据填充模型 问题是提取似乎有效 但我的模型没有填充数据 代码片段 Backbone emulateHTTP true Backbone emulateJSON true C
  • 仅针对使用通道而定制的 Phoenix 应用程序如何在多台机器上扩展?使用HAProxy?如何向所有节点广播消息?

    我将节点应用程序纯粹用于带有 Redis PubSub 的 socket io 通道 目前我将其分布在 3 台机器上 并由其中一台机器上的 nginx 负载平衡提供支持 我想用 Phoenix 应用程序替换这个节点应用程序 而且我对 erl
  • 依赖注入与托管依赖关系与全局对象

    我正在 Javascript BackboneJS 一个 MVC 框架 RequireJS 框架中工作 但这个问题有点 OO 通用 首先让我解释一下 在 Backbone 中 您的视图是传统视图和控制器的混合 而您的 HTML 模板是传统的
  • Java websocket 客户端不适用于 GDAX 沙箱环境

    我正在使用 spring WebSocketWebSocketClient连接 GDAX 服务器 它在实时环境中运行良好 但相同的代码不适用于沙箱环境 这是我连接到服务器的代码 public class Test public static
  • 使用主干渲染引导模式

    我认为代码可以更好地解释我的问题 风景 App Views ErrorModal Backbone View extend template window template errorModal render function this e
  • 使用 Socket.IO 的 Python 客户端到 nodeJS 服务器

    我正在尝试使用 socket io 将值从我的树莓派 在 python 2 7 9 中 发送到我的 nodeJS 服务器 我的目标是通过 websocket 连接从我的 pi 连续发送许多值到我的节点服务器 本地 该服务器应该获取这些值并将
  • 需要帮助了解主干中嵌套视图的基础知识

    我一直在阅读有关backbone js 中嵌套视图的大量内容 并且了解其中的很多内容 但仍然令我困惑的一件事是 如果我的应用程序有一个 shell 视图 其中包含页面导航 页脚等子视图 这些子视图在使用应用程序的过程中不会改变 那么我是否需
  • Marionette.View 中 UI 元素的可用性

    我只是想了解 Backbone Marionette 关于 UI 元素的观点背后的决定 在现有 DOM 元素上实例化 Marionette View 时 如下所示 view new Marionette ItemView el elemen
  • “Backbone.js 视图”中的单击事件不起作用

    我尝试开始使用backbone js 但我发现当我不使用 body 作为视图的el时 该事件不起作用 这是代码 您可以将其另存为 html 文件并运行
  • 覆盖主干“设置”方法

    我想重写骨干集方法 以便每当我为骨干模型设置一个值时 都会调用在该属性上注册的回调 而无需检查该属性的相同先前值 var model Backbone Model extend defaults prop1 true var view Ba
  • 在cypress中捕获websocket请求

    我试图捕获测试期间发生的所有请求 我的应用程序使用 WebSocket 并且使用拦截命令我无法捕获 wss 请求 有什么办法可以做到这一点吗 我认为拦截命令不能直接捕获网络套接字 一种方法是观察 ws 通信的结果 如下所示使用 Cypres
  • 使用服务器发送事件进行双向客户端-服务器通信(而不是 WebSocket)的缺点

    最近 我发现服务器发送事件是 WebSocket 的一种更简单的替代方案 用于从服务器进行推送 大多数比较它们的地方 例如here https stackoverflow com questions 5195452 websockets v
  • 对周围的所有 Node JS 框架/库等感到困惑 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我感觉有点困惑 有很多 Node js 相关 东西 的框架 有人能给我一个概述吗 以下库 框架 其他内容如何相互关联 交互 其中包括什么或
  • 如何将参数传递给backbone.js 中事件对象中绑定的函数

    我需要为 Backbone 中的事件对象中使用的函数提供参数 var DocumentRow Backbone View extend tagName li className document row events click icon
  • 主干集合排序

    我制作了我的第一个主干应用程序 但在集合排序方面遇到了一些问题 使用这个后 var SortedFriends MyFriends sortBy function friend return friend get uid console l

随机推荐

  • 如何将 _ITERATOR_DEBUG_LEVEL 添加到 CMake?

    我是 CMake 新手 我想将 ITERATOR DEBUG LEVEL 设置为 0 发布版本 和 2 调试版本 以修复尝试编译依赖于其他项目的项目时出现的问题 Error iterator debug level 值 2 与值 0 不匹配
  • Angular:ngc 还是 tsc?

    我一直在使用tsc 但是看到angular io强调ngc 我想知道两者是否有优势 或者我是否应该选择其中一个 提前致谢 tsc 和 ngc 具有不同的目的 并不是要选择其中之一 tsc 是一个 TypeScript 编译器 如果您的应用程
  • C# 从 OpenXML 返回内存流,导致损坏的 Word 文件

    我对来自 OpenXML 的 MemoryStream 有疑问 如果我在一个方法中完成所有步骤 我可以成功打开 Word 文件 更改它并通过 HttpResponse 下载它 但是 如果我尝试通过返回 MemoryStream 在两个不同的
  • 如何使用Android自动填充API

    我已经使用 android webview 组件构建了一个小型浏览器 并且希望使用 Android AutoFill API 集成密码 凭据管理器支持 我已阅读文档 但完全迷失了方向 找不到任何与 webviews 等复杂事物集成的示例 这
  • 嵌套 TagBuilder -作为 TagBuilderTree-

    TagBuilder 是构建 HTML 元素的一个很好的实现 但是某些 HTML 元素可以有其他元素 我称之为 子元素 我无法从 Mvc 类中找到任何类 问题 我应该实现几个支持嵌套标签的类 TagBuilderTree 和 TagBuil
  • 在 Visual Studio C++ 项目中在哪里输入 DLL 依赖项?

    我正在将一些在 Linux 和 Mac 上运行的 Qt 项目文件 pro 转换为 Visual Studio 项目文件 vcproj Qt Visual Studio 加载项可以很好地转换除 DLL 依赖项之外的所有内容 我应该将它们放在
  • 关于变量/函数命名约定的思考

    我一生都在断断续续地编码 我主要编写 Perl 代码 但也编写一些 Java PHP C C 我什至尝试过 Emacs Lisp 并且偶尔也编写过 shell 脚本 然而 我从来没有真正参与这个主题来获得任何专业知识 其他事情对我来说有更高
  • Android 从 java 代码设置文本视图颜色

    我有一个列表 并为此编写了一个自定义适配器 我想为此设置一些文本颜色 例如橙色代码 F06D2F 我正在展示我的代码片段getView method TextView text new TextView this context text
  • 获取单元测试时引用项目的路径

    我正在尝试使用单元测试来测试我的 ASP Net Web 应用程序中的类的功能 此类从硬盘驱动器加载一些文件 以执行 xsl 转换 Xsl GetXSLFromFile AppDomain CurrentDomain BaseDirecto
  • 如何在 Java 中解析 EDIFACT? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 解析 EDIFACT 可能是一项艰巨的任务 如何从 EDIFACT 文件正确创建语法和语义正确的树 ww
  • for 循环的增长顺序复杂

    对于以下代码片段 N 的增长顺序是多少 int sum 0 for int i 1 i lt N i i 2 for int j 1 j lt N j j 2 for int k 1 k lt i k sum 我发现有 lgN 项 但我一直
  • 什么是过度获取或不足获取?

    我有时会玩 graphQL 在 graphQL 之前 我们通常使用 REST API 许多开发者表示 graphQL 修复了 REST 的一些问题 例如过度获取和不足获取 我对这个术语感到困惑 有人可以解释一下在这种情况下什么是过度获取和不
  • 如何不经过身份验证直接向 SMTP 服务器发送邮件?

    我想通过直接连接到将电子邮件直接从脚本发送到 Gmail 电子邮件帐户smtp gmail com 但是 我不希望脚本中包含 gmail 密码 据我所知 Gmail 似乎需要身份验证才能发送任何邮件 包括发送给自己的用户 我的问题是 来自另
  • TFS 远程用户... SSL + 密码还是 VPN?

    我目前的任务是为客户端设置 TFS 服务器 TFS将主要由本地 现场 用户通过内部网络访问 简单 但是我们拥有的少数远程用户怎么办 他们应该通过 VPN 连接还是最好将 TFS 服务器公开并让用户通过 SSL 连接并向 TFS 提供用户名和
  • 使用 TWIG Markdown 转义 HTML 代码

    我正在开发一个博客评论包 我想让用户使用 Markdown 发布一些代码 我正在使用 symfony2 TWIG 和KNP Markdown 捆绑包 https github com KnpLabs KnpMarkdownBundle用于解
  • 在 TypeScript 项目中使用 Path2D 未解决

    我想用新的Path2D https developer mozilla org en US docs Web API Path2D Path2Dapi 在 TypeScript 项目中 但我在 lib es6 d ts 中没有看到它 使用它
  • 还有其他方法可以调整 Blockly 工作区的大小吗?

    我正在努力适应我的Blockly workspace在 div 内 我希望如果页面变小 div 和Blockly workspace它的内部也会更小 我知道有一种方法可以Google在其规定的文档 https developers goog
  • 如何解析 ISO8601 日期 [重复]

    这个问题在这里已经有答案了 我得到了关于这种格式的日期字符串 2011 12 29T09 09 06 0500 如何将其转换为日期对象 尝试这个解决方案 NSString dateString 2011 12 29T09 09 06 050
  • 坐标三角学 - 计算飞行路径弧线的中点

    我正在尝试使用 SVG 在地图上绘制飞行路径 我在 Leaflet 之上使用 d3 但所使用的框架不应该对我的问题产生影响 这是三角函数 http fiddle jshell net zw8TR 26 http fiddle jshell
  • 在没有 Socket.io 的 Backbone.js 应用程序中使用 websockets

    我是 Backbone 的新手 我正在尝试构建一个 Backbone 应用程序来实时绘制和映射数据 我实现了一个 websocket 以下this https github com andrewvc d3 backbone presenta