在meteor中,pub/sub可以用于任意内存对象(不是mongo集合)

2024-02-12

我想在我的流星应用程序中建立双向(双向)通信。但我需要在不使用 mongo 集合的情况下做到这一点。

那么 pub/sub 可以用于任意内存对象吗?

有没有更好、更快或者更低级的方法?性能是我最关心的问题。

Thanks.


是的,pub/sub 可用于任意对象。Meteor 的文档甚至提供了一个示例 http://docs.meteor.com/#meteor_publish:

// server: publish the current size of a collection
Meteor.publish("counts-by-room", function (roomId) {
  var self = this;
  check(roomId, String);
  var count = 0;
  var initializing = true;

  // observeChanges only returns after the initial `added` callbacks
  // have run. Until then, we don't want to send a lot of
  // `self.changed()` messages - hence tracking the
  // `initializing` state.
  var handle = Messages.find({roomId: roomId}).observeChanges({
    added: function (id) {
      count++;
      if (!initializing)
        self.changed("counts", roomId, {count: count});
    },
    removed: function (id) {
      count--;
      self.changed("counts", roomId, {count: count});
    }
    // don't care about changed
  });

  // Instead, we'll send one `self.added()` message right after
  // observeChanges has returned, and mark the subscription as
  // ready.
  initializing = false;
  self.added("counts", roomId, {count: count});
  self.ready();

  // Stop observing the cursor when client unsubs.
  // Stopping a subscription automatically takes
  // care of sending the client any removed messages.
  self.onStop(function () {
    handle.stop();
  });
});

// client: declare collection to hold count object
Counts = new Mongo.Collection("counts");

// client: subscribe to the count for the current room
Tracker.autorun(function () {
  Meteor.subscribe("counts-by-room", Session.get("roomId"));
});

// client: use the new collection
console.log("Current room has " +
            Counts.findOne(Session.get("roomId")).count +
            " messages.");

在这个例子中,counts-by-room正在发布从返回的数据创建的任意对象Messages.find(),但您也可以轻松地在其他地方获取源数据并以相同的方式发布。您只需要提供相同的added and removed像这里的例子一样的回调。

您会注意到客户端上有一个名为的集合counts,但这纯粹是在客户端的内存中;它没有保存在 MongoDB 中。我认为这是使用 pub/sub 所必需的。

如果你想避免仅内存中的集合,你应该看看Meteor.call。你可以创建一个Meteor.method like getCountsByRoom(roomId)并从客户端调用它,例如Meteor.call('getCountsByRoom', 123)该方法将在服务器上执行并返回其响应。这更像是传统的 Ajax 做事方式,并且您会失去 Meteor 的所有反应性。

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

在meteor中,pub/sub可以用于任意内存对象(不是mongo集合) 的相关文章

  • 将MongoDb atlas数据库导出到本机Mongo compass

    我在 Atlas 中有一个名为 test 的远程数据库 我想将集合名称 image table 下载为 JSON 文件 在 Mac 终端中 mongoexport db test collection image table image j
  • jquery.find() 可以只选择直接子项吗?

    我应该向 jQuery find 提供什么参数来选择元素子元素而不选择其他元素 我不能用 gt 引导选择器 而用 将选择所有后代 而不仅仅是直接子代 我知道 jQuery children 但这是一个库 因此用户能够提供自己的选择器 并且我
  • 在 Vue.js 中从父组件执行子方法

    目前 我有一个 Vue js 组件 其中包含其他组件的列表 我知道使用 vue 的常见方式是将数据传递给孩子 并从孩子向父母发出事件 但是 在这种情况下 我想在子组件中的按钮出现时执行子组件中的方法 parent被点击 哪种方法最好 一种建
  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • MongoDB 按数组内部元素分组

    我有一个文章列表 每篇文章都有一个数组属性 其中列出了其中提到的各个个人 id oid 52b632a9e4f2ba13c82ccd23 providerName The Guardian url http feeds theguardia
  • 从未用 @flow 标记的导入文件中获取类型定义

    TL DR我怎么告诉flow从未声明的导入模块导入类型定义 flow 加长版 流接缝能够从不使用流语法的文件中派生类型 请参阅示例 示例文件 flow js if Math random lt 0 5 var y hello else va
  • JavaScript 重定向到新窗口

    我有以下代码 它根据下拉列表的值重定向到页面 我如何使其在新窗口中打开 function goto form var index form select selectedIndex if form select options index
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • 通过 CDN 使用 Dojo 时如何加载自定义 AMD 模块?

    我正在使用 google 的 CDN 并尝试使用他们的加载程序加载我自己的 AMD 模块 我知道我做错了什么 但我被困住了 有任何想法吗
  • 如何使输入字段和提交按钮变灰

    我想变灰这两件事 http doorsplit heroku com 歌曲输入字段和提交按钮 直到用户输入艺术家 有没有一种简单的方法可以通过 JQuery 来做到这一点 艺术家输入字段的id是 request artist 你可以这样做
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • 如何使用tampermonkey模拟react应用程序中的点击?

    我正在尝试使用 Tampermonkey 脚本模拟对 React 元素的点击 不幸的是 由于 React 有自己的影子 DOM 所以天真的方法使用document querySelector 不工作 我遇到了一些需要修改 React 组件本
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • 为什么我不能在 AngularJS 中使用 data-* 作为指令的属性名称?

    On the t他的笨蛋 http plnkr co edit l3KoY3 p preview您可以注意到属性名称模式的奇怪行为data 在指令中 电话 Test of data named attribute br
  • 如何在 pg-promise 中设置模式

    我正在搜索的文档pg 承诺 https github com vitaly t pg promise特别是在创建客户端时 但我无法找到设置连接中使用的默认架构的选项 它始终使用public架构 我该如何设置 通常 为数据库或角色设置默认架构
  • 如何获取浏览器视口中当前显示的内容

    如何获取当前正在显示长文档的哪一部分的指示 例如 如果我的 html 包含 1 000 行 1 2 3 9991000 并且用户位于显示第 500 行的中间附近 那么我想得到 500 n501 n502 或类似的内容 显然 大多数场景都会比
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a

随机推荐

  • 使用Java通过FTP将所有目录复制到服务器

    我需要将一个目录从本地磁盘复制到服务器 该目录包含很多目录 子目录和文件 想想目录的层次结构树 以下是复制一个文件的示例 public void saveFilesToServer throws IOException FTPClient
  • “保留执行”的含义

    阅读答案来自在c标识符中使用下划线的规则是什么 https stackoverflow com questions 228783 what are the rules about using an underscore in a c ide
  • 为什么并行化会如此显着地降低性能?

    我有一个 OpenMP 程序 数千行 无法在这里重现 其工作原理如下 它由工作线程和任务队列组成 一个任务由一个卷积组成 每次工作线程从工作队列中弹出任务时 它都会执行所需的卷积 并可选择将更多卷积推送到队列中 没有特定的 主 线程 所有工
  • 使用 React Router 和 Redux Simple Router 进行 onEnter 转换不会渲染新路由的组件

    我有一个使用react 0 14 redux 3 05 react router 1 0 3 和 redux simple router 2 0 2 的应用程序 我正在尝试根据商店状态为我的一些路线配置 onEnter 转换 转换挂钩成功触
  • 一个视图中的两个模型模板 - Backbone/Marionette

    我试图在一个视图中使用两个模型 并使用这两个模型的模板 我正在和木偶一起工作 这是我对视图的初始化 main app layout header show new APP Views HeaderView model oneModel mo
  • 如何将信号从一个程序发送到另一个程序?

    我使用消息队列作为两个程序之间的 IPC 现在我想使用消息队列将数据从一个程序发送到另一个程序 然后通过信号 SIGINT 通知它 我不知道如何将信号从一个程序发送到另一个程序 如果有解决方案 任何人都可以提供示例代码吗 include
  • 我应该如何选择如何使用 R 进行打印? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 R 中有多种显示文本的方法 cat print write writeLines sink message 以及我现在不记得的其他替代
  • 为什么 XML 命名空间通常以 http://... 开头?

    例如 WPF 命名空间是 xmlns http schemas microsoft com winfx 2006 xaml presentation 如果我定义自己的命名空间 它也应该以http开头吗 不是http吗误导性的 命名空间的值没
  • 在方法参数中使用 NotNull 注解

    我刚刚开始使用 NotNull使用 Java 8 进行注释并得到一些意想不到的结果 我有一个这样的方法 public List
  • 自定义 django 管理模板不起作用

    我一直在尝试为 Django 工作的管理页面获取自定义模板 但没有成功 我已经阅读了 django 文档和几个博客 它们将其解释为一个如此简单的步骤 我认为这是如此 截至目前 管理页面可以工作 但我自己重写的 CSS 或模板不起作用 我的设
  • 每个优秀的 Java/Java EE 开发人员都应该能够回答的问题? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 无法重新分配$this?

    我的服务器上有一个 php 版本 4 的脚本 现在它已更改为 php5 并且该脚本不再起作用 我收到此错误 致命错误 无法在 URL database php 第 88 行中重新分配 this 该文件中有一个具有函数的类 里面是88行 th
  • 大稀疏矩阵到三角矩阵 R

    我在 R 中有一个非常大的 大约 9100 万个非零条目 sparseMatrix 如下所示 gt myMatrix a b c a 1 2 b 1 c 2 我想将其转换为三角矩阵 上或下 但是当我尝试 myMatrix myMatrix
  • Applescript 抓取 GIF 文件位置,将其复制到剪贴板,然后粘贴

    我正在尝试编写一个苹果脚本来定位 复制和粘贴图像文件 以下代码适用于jpegs and pngs set thePath to file location set the clipboard to read thePath as class
  • glibc/NPTL/Linux 稳健互斥体中的竞争条件?

    在对该问题的评论中在 Unix 崩溃时自动释放互斥锁 https stackoverflow com questions 4149266 automatically release mutex on crashes in unix rq 1
  • 从“NSDecimal”或“NSDecimalNumber”转换为 C# 的“decimal”类型

    我有一个NSDecimalNumber来自 StoreKit 的SKProduct类 我想将其转换为 C 的decimal类型以尽量减少精度损失 有没有直接的方法来做这样的事情 我想我的两个选择是 假设我了解每个的二进制实现并进行我自己的按
  • AngularJS 将数据传递给 $http.get 请求

    我有一个执行 http POST 请求的函数 代码如下 这很好用 http url user update path method POST data user id user id draft true 我有另一个 http GET 函数
  • webpack-dev-server 未重新加载

    我正在使用 webpack 5 目前有以下设置 webpack prod js 我有一些用于生产的特定配置 例如图像压缩 开发工具 CSS 缩小 特定元标记值 webpack dev js 我有一些用于开发的特定配置 例如 无图像压缩 无
  • 防止 CMake 查看库和包含的路径

    考虑下面的简单 CMake 脚本 试图找到一个虚构的theheader hC 头文件 据我所知 这是在目录中查找库的包含目录的典型方法FindXXX cmake模块 cmake minimum required VERSION 2 6 pr
  • 在meteor中,pub/sub可以用于任意内存对象(不是mongo集合)

    我想在我的流星应用程序中建立双向 双向 通信 但我需要在不使用 mongo 集合的情况下做到这一点 那么 pub sub 可以用于任意内存对象吗 有没有更好 更快或者更低级的方法 性能是我最关心的问题 Thanks 是的 pub sub 可