问题标签 [ddp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
610 浏览

meteor - Meteor DDP - “就绪”和“更新”消息说明

我目前正在根据此页面上提供的规范实施 DDP 客户端: https ://github.com/meteor/meteor/blob/master/packages/livedata/DDP.md

我只是对称为“就绪”和“更新”的 2 种方法类型有疑问。

根据规范,让我们从“准备就绪”开始:

当一个或多个订阅完成发送其初始一批数据时,服务器将发送一条带有其 ID 的就绪消息。

这样做意味着我们可以从服务器获得多个“添加”消息,直到将整个集合完全传输到客户端。我们应该把它存储在一个临时的地方,然后等待“准备好的”信号量在公开之前?即在真正的收藏中?

关于远程过程调用的相同问题。我是否应该将结果存储在临时集合中,并且仅在收到“更新”消息后才返回(处理)结果?

这部分晦涩难懂

一旦服务器基于此过程调用完成向客户端发送所有相关数据消息,服务器应使用此方法的 ID 向客户端发送更新的消息。

“应该”,所以如果我确实依赖它但什么都没有,我会被卡住吗?

0 投票
1 回答
454 浏览

meteor - Meteor DDP 上下文

我正在为分布式 ddp 客户端创建包

基本程序如下:

  1. 客户端连接
  2. 如果它是新的,它会使用 Diffie-Hellman 密钥交换算法协商自己的密钥和秘密
  3. 然后使用密钥和加密密码登录

用户可以通过使用给定 ip 搜索将客户分配到他们的帐户

这样我们就有了自动客户端注册。

我要解决的是在服务器端设计类似于 Meteor.userId 的功能

step1:ddp客户端登录,(跳过DH算法)

step2:ddp客户端调用其他方法

问题在于 Meteor.publish 方法是否有一些简单的方法可以在当前上下文中使用有效的 ClientID 重新启动所有订阅?我可以遵循 livedata 包中的 setUserId 方法,但它使用了很多我不想接触的内部结构

这必须工作

还是有其他方法可以完成我的任务?我只是想将客户端 ID 保留在上下文中,这样它就不必对每个方法调用进行授权

这个解决方案是不可接受的

0 投票
2 回答
124 浏览

perl - 如何使 Data::Printer 在内部显示字符串化值?

我有一些复杂的对象结构,我使用 Data::Printer 来检查它们。它不够有用的一种情况是:当一个对象(容器)具有另一个对象(子对象)的字段时,子对象仅作为类名出现在 DDP 的输出中。我还希望看到孩子的字符串化值。

让我们举个例子:

输出:

如您所见,孩子在输出中无法区分。我想在那个地方看到字符串化,除了类名之外,或者代替类名。

0 投票
1 回答
240 浏览

meteor - MeteorJS - DDP 文档

DDP 文档是“对协议的粗略描述,并不打算完全确定。”

是否存在对协议的精确、明确的描述?如果是这样,它在哪里?

0 投票
1 回答
1826 浏览

meteor - Meteor 的 DDP 在同步非常大的集合方面的效率如何?

Meteor 的 DDP 协议非常适合将少量数据从服务器同步到基于浏览器的客户端,这从本质上限制了处理的数据量。

但是,考虑使用 Meteor 将大型集合从一台服务器同步到另一台服务器的情况,或者仅使用 DDP 协议本身将一个 MongoDB 与另一个同步。

在这种情况下(计算上)DDP 的效率如何?它对多个客户的扩展性如何?性能的限制仅仅是带宽还是 DDP 也会受到 CPU 的限制?目前可以通过 DDP 合理同步的最大数据量是多少?DDP 是否只是这样做的错误方法(请参阅下面的参考资料)?

一些额外的想法:

  • 据我所知,当前版本的 DDP 跟踪每个客户端的整个集合,因此它不能渐近非常有效。
  • 创建智能集合是为了提高服务器到客户端的同步集合的性能。但我不清楚这是否在改善 DDP 或其他方面。

也可以看看:

编辑

在对此进行了一些经验经验之后,我不得不得出结论,答案“不是很有效”。有关说明,请参阅https://stackoverflow.com/a/21835534/586086

与 Meteor 开发人员的讨论表明,这个问题将在未来通过 DDP 和发布-订阅 API 的修订来解决,其中合并框将被删除,客户端将处理合并。这将节省服务器上的 CPU/内存,并允许通过网络发送更大的数据集。

0 投票
1 回答
3864 浏览

javascript - 如何通过 DDP (WebSocket) 协议访问meteor.com 上托管的应用程序?

我有一个Meteor应用程序A和另一个应用程序B,不使用 Meteor,而是与应用程序进行一些数据交换A。当我在本地网络中的机器上启动它时它工作正常A,但是当我将它部署在托管它的流星.com 上时它没有。服务器没有回复。

B使用代码new WebSocket("ws://" + host + ":3000/websocket")进行连接(DDP 协议)。但是,当我将 ws 更改为 wss 时,即使使用 LAN 中的机器,它也不再工作 - 它没有回复。

当我在浏览器中打开应用程序时,我看到该应用程序的主页A使用如下 URL

wss://ddp--6774-{my host name}.meteor.com/sockjs/465/asf0b7da/websocket.

问题:

  1. 如何B使用安全 WebSocket (wss) 进行连接?

  2. 如何将其连接到A托管在 {my host name}.meteor.com 上?

  3. 如何强制A回复使用固定 URL 的请求,例如,ws://{my host name}.meteor.com:3000/websocket?如何强制它使用 ws 而不是 wss?

  4. 我应该在 config.js 或 settings.js 中指定一些内容吗?

  5. 有没有办法为meteor.com主机指定环境变量,例如DDP_DEFAULT_CONNECTION_URL、NODE_OPTIONS?

0 投票
2 回答
2549 浏览

mongodb - Meteor:集合、变量、出版物和订阅的名称之间的区别?

在 Discover Meteor 示例中,“posts”和“Posts”之间的区别是什么?为什么当我们从服务器插入时使用“posts”,而从浏览器查询时使用“posts”?系统不会因大小写差异而感到困惑吗?

我在posts.js 中看到了客户端帖子到服务器帖子的变量分配。将客户端大写并为服务器使用小型大写字母是一种传统的符号吗?

为什么 server/fixtures.js 使用“帖子”?我假设我们在浏览器(客户端)中查询“帖子”,并在服务器中使用“帖子”,就像我们在流星 mongo 中所做的那样。那么为什么我们现在在服务器中使用 Posts 呢?

0 投票
1 回答
623 浏览

websocket - Meteor 客户端无法连接到服务器

至少有一半的时间,当客户端加载我的Meteor应用程序时,它无法连接到服务器。

如果我在控制台中运行它:

我可以看到客户端正在反复连接、断开连接、重新连接。

在此处输入图像描述

如果我在 Chrome 的开发工具中打开网络选项卡,我可以看到大约每隔一两秒,就会发出另一个 WebSocket 请求。

在此处输入图像描述

这可能是什么原因造成的?

0 投票
1 回答
497 浏览

node.js - DDP、Node 和 Chrome Browserify

我在 chrome 扩展中使用ddpbrowserify包通过 ddp 客户端与 Meteor 应用程序通信。

但是,当我实例化连接时,我遇到了错误:

这发生在创建一个new Websocket(uri='ws://localhost:3000/websocket', protocols={})

我在如何通过 DDP (WebSocket) 协议访问meteor.com 上托管的应用程序中看到类似的错误?,但他们不得不将端口更改为 443 的解决方案不起作用。

有人有解决方法吗?

0 投票
1 回答
295 浏览

meteor - Meteor 和有序集合(DDP 客户端和观察者)

我为流星创建了一个 DDP 客户端并实现了一个有序集合。基本上我实现了DDP 规范中的“added”和“ addedBefore”方法,但我对解释它们的正确方式有疑问。最初,我认为服务器将(仅)在集合中使用“add”或“ addedBefore”,具体取决于它是否被订购。但是有有序和无序的集合听起来是无稽之谈。所以我的问题来了:“添加”消息是否应该简单地解释为带有(before == null)的“addBefore”的别名,即添加到集合的最后?

同样在cursor.observe(callbacks)我发现以下回调函数added(document) addedAt(document, atIndex, before)是什么意思这里?我会在这两个函数中收到通知,但出于性能考虑,我最好不要对它们中的每一个都进行回调?