问题标签 [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.
meteor - Meteor DDP - “就绪”和“更新”消息说明
我目前正在根据此页面上提供的规范实施 DDP 客户端: https ://github.com/meteor/meteor/blob/master/packages/livedata/DDP.md
我只是对称为“就绪”和“更新”的 2 种方法类型有疑问。
根据规范,让我们从“准备就绪”开始:
当一个或多个订阅完成发送其初始一批数据时,服务器将发送一条带有其 ID 的就绪消息。
这样做意味着我们可以从服务器获得多个“添加”消息,直到将整个集合完全传输到客户端。我们应该把它存储在一个临时的地方,然后等待“准备好的”信号量在公开之前?即在真正的收藏中?
关于远程过程调用的相同问题。我是否应该将结果存储在临时集合中,并且仅在收到“更新”消息后才返回(处理)结果?
这部分晦涩难懂
一旦服务器基于此过程调用完成向客户端发送所有相关数据消息,服务器应使用此方法的 ID 向客户端发送更新的消息。
“应该”,所以如果我确实依赖它但什么都没有,我会被卡住吗?
meteor - Meteor DDP 上下文
我正在为分布式 ddp 客户端创建包
基本程序如下:
- 客户端连接
- 如果它是新的,它会使用 Diffie-Hellman 密钥交换算法协商自己的密钥和秘密
- 然后使用密钥和加密密码登录
用户可以通过使用给定 ip 搜索将客户分配到他们的帐户
这样我们就有了自动客户端注册。
我要解决的是在服务器端设计类似于 Meteor.userId 的功能
step1:ddp客户端登录,(跳过DH算法)
step2:ddp客户端调用其他方法
问题在于 Meteor.publish 方法是否有一些简单的方法可以在当前上下文中使用有效的 ClientID 重新启动所有订阅?我可以遵循 livedata 包中的 setUserId 方法,但它使用了很多我不想接触的内部结构
这必须工作
还是有其他方法可以完成我的任务?我只是想将客户端 ID 保留在上下文中,这样它就不必对每个方法调用进行授权
这个解决方案是不可接受的
perl - 如何使 Data::Printer 在内部显示字符串化值?
我有一些复杂的对象结构,我使用 Data::Printer 来检查它们。它不够有用的一种情况是:当一个对象(容器)具有另一个对象(子对象)的字段时,子对象仅作为类名出现在 DDP 的输出中。我还希望看到孩子的字符串化值。
让我们举个例子:
输出:
如您所见,孩子在输出中无法区分。我想在那个地方看到字符串化,除了类名之外,或者代替类名。
meteor - MeteorJS - DDP 文档
DDP 文档是“对协议的粗略描述,并不打算完全确定。”
是否存在对协议的精确、明确的描述?如果是这样,它在哪里?
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/内存,并允许通过网络发送更大的数据集。
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
.
问题:
如何
B
使用安全 WebSocket (wss) 进行连接?如何将其连接到
A
托管在 {my host name}.meteor.com 上?如何强制
A
回复使用固定 URL 的请求,例如,ws://{my host name}.meteor.com:3000/websocket
?如何强制它使用 ws 而不是 wss?我应该在 config.js 或 settings.js 中指定一些内容吗?
有没有办法为meteor.com主机指定环境变量,例如DDP_DEFAULT_CONNECTION_URL、NODE_OPTIONS?
mongodb - Meteor:集合、变量、出版物和订阅的名称之间的区别?
在 Discover Meteor 示例中,“posts”和“Posts”之间的区别是什么?为什么当我们从服务器插入时使用“posts”,而从浏览器查询时使用“posts”?系统不会因大小写差异而感到困惑吗?
我在posts.js 中看到了客户端帖子到服务器帖子的变量分配。将客户端大写并为服务器使用小型大写字母是一种传统的符号吗?
为什么 server/fixtures.js 使用“帖子”?我假设我们在浏览器(客户端)中查询“帖子”,并在服务器中使用“帖子”,就像我们在流星 mongo 中所做的那样。那么为什么我们现在在服务器中使用 Posts 呢?
websocket - Meteor 客户端无法连接到服务器
至少有一半的时间,当客户端加载我的Meteor应用程序时,它无法连接到服务器。
如果我在控制台中运行它:
我可以看到客户端正在反复连接、断开连接、重新连接。
如果我在 Chrome 的开发工具中打开网络选项卡,我可以看到大约每隔一两秒,就会发出另一个 WebSocket 请求。
这可能是什么原因造成的?
node.js - DDP、Node 和 Chrome Browserify
我在 chrome 扩展中使用ddp和browserify包通过 ddp 客户端与 Meteor 应用程序通信。
但是,当我实例化连接时,我遇到了错误:
这发生在创建一个new Websocket(uri='ws://localhost:3000/websocket', protocols={})
我在如何通过 DDP (WebSocket) 协议访问meteor.com 上托管的应用程序中看到类似的错误?,但他们不得不将端口更改为 443 的解决方案不起作用。
有人有解决方法吗?
meteor - Meteor 和有序集合(DDP 客户端和观察者)
我为流星创建了一个 DDP 客户端并实现了一个有序集合。基本上我实现了DDP 规范中的“added”和“ addedBefore”方法,但我对解释它们的正确方式有疑问。最初,我认为服务器将(仅)在集合中使用“add”或“ addedBefore”,具体取决于它是否被订购。但是有有序和无序的集合听起来是无稽之谈。所以我的问题来了:“添加”消息是否应该简单地解释为带有(before == null)的“addBefore”的别名,即添加到集合的最后?
同样在cursor.observe(callbacks)我发现以下回调函数added(document) 或 addedAt(document, atIndex, before)是什么意思或这里?我会在这两个函数中收到通知,但出于性能考虑,我最好不要对它们中的每一个都进行回调?