- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
想象一下以下案例:
Meteor.Collection
客户端上的 s 将被更新,即插入转发给所有客户端(这意味着一个插入消息发送给 1,000 个客户端)最佳答案
简短的回答是只有新数据才能通过网络发送。这是
它是如何工作的。
Meteor 服务器的三个重要部分负责管理
订阅:发布函数,它定义了什么的逻辑
订阅提供的数据; Mongo 驱动程序,它监视
更改数据库;和合并框,它结合了所有
客户端的事件订阅并通过网络将它们发送到
客户。
发布功能
每次 Meteor 客户端订阅一个集合时,服务器都会运行一个
发布功能。发布函数的工作是找出集合
其客户应拥有的文档并发送每个文档属性
进入合并框。它为每个新订阅客户端运行一次。你
可以在发布函数中放入任何你想要的 JavaScript,比如
使用 this.userId
进行任意复杂的访问控制.发布
函数通过调用 this.added
将数据发送到合并框, this.changed
和this.removed
.见
full publish documentation对于
更多细节。
大多数发布功能不必处理低级added
, changed
和 removed
API,不过。如果发布函数返回一个 Mongo
cursor, meteor 服务器自动连接Mongo的输出
驱动程序( insert
、 update
和 removed
回调)到
合并框( this.added
、 this.changed
和 this.removed
)。它很整洁
您可以在发布功能中预先进行所有权限检查,并且
然后直接将数据库驱动连接到合并框,无需任何用户
代码的方式。当自动发布打开时,即使是这一点
hidden:服务器自动为每个文档中的所有文档设置一个查询
集合并将它们推送到合并框中。
另一方面,您不仅限于发布数据库查询。
例如,您可以编写一个读取 GPS 位置的发布函数
来自 Meteor.setInterval
内的设备,或轮询旧的 REST API
来自另一个网络服务。在这些情况下,您将更改
通过调用低级合并框added
, changed
和 removed
DDP API。
蒙戈司机
Mongo 驱动程序的工作是观察 Mongo 数据库中的更改
实时查询。这些查询持续运行并返回更新作为
调用 added
更改结果, removed
, 和 changed
回调。
Mongo 不是实时数据库。所以司机投票。它保持一个
每个事件实时查询的最后一个查询结果的内存副本。开
每个轮询周期,它将新结果与之前保存的结果进行比较
结果,计算最小集合added
, removed
, 和 changed
描述差异的事件。如果多个调用者注册
同一个实时查询的回调,驱动程序只观看一份
查询,使用相同的结果调用每个注册的回调。
每次服务器更新一个集合时,驱动程序都会重新计算每个
对该集合的实时查询(Meteor 的 future 版本将公开一个
用于限制哪些实时查询在更新时重新计算的扩展 API。)
驱动程序还会在 10 秒的计时器上轮询每个实时查询以捕获
绕过 Meteor 服务器的带外数据库更新。
合并框
合并框的工作是合并结果( added
、 changed
和 removed
调用)所有客户端的事件发布功能到单个数据中
流。每个连接的客户端都有一个合并框。它拥有一个
客户端 minimongo 缓存的完整副本。
在您只有一个订阅的示例中,合并框是
本质上是一种传递。但是一个更复杂的应用程序可以有多个
可能重叠的订阅。如果两个订阅都设置了
同一文档上的相同属性,合并框决定哪个值
优先并且只将它发送给客户端。我们没有曝光
用于设置订阅优先级的 API。目前,优先事项是
由客户端订阅数据集的顺序决定。第一个
客户订阅的优先级最高,第二个
订阅是次高的,依此类推。
因为合并框保存了客户端的状态,所以它可以发送最少的
保持每个客户端最新的数据量,无论发布什么
功能喂养它。
更新时会发生什么
所以现在我们已经为您的场景做好了准备。
我们有 1,000 个连接的客户端。每个人都订阅了同一个直播
Mongo 查询 ( Somestuff.find({})
)。由于每个客户端的查询都相同,因此驱动程序是
只运行一个实时查询。有 1,000 个事件合并框。并且
每个客户端的发布函数都注册了一个 added
, changed
,和removed
在进入合并框之一的实时查询上。
没有其他任何东西连接到合并框。
首先是 Mongo 驱动程序。当其中一个客户端插入新文档时
进入 Somestuff
,它会触发重新计算。 Mongo 驱动程序重新运行
查询 Somestuff
中的所有文档,将结果与
内存中的先前结果,发现有一个新文档,并且
调用 1,000 个已注册的每一个 insert
回调。
接下来,发布功能。这里几乎没有发生:每个
的 1,000 insert
回调通过以下方式将数据插入合并框
调用 added
.
最后,每个合并框对照其检查这些新属性
其客户端缓存的内存副本。在每种情况下,它发现
值尚未在客户端上,并且不影响现有值。所以
合并框发出 DDP DATA
SockJS 连接到其的消息
客户端并更新其服务器端内存副本。
总 CPU 成本是 diff 一个 Mongo 查询的成本,加上
1,000 个合并框检查其客户的状态并构建一个新的
DDP 消息负载。唯一通过线路流动的数据是单个
JSON 对象发送到 1,000 个客户端中的每一个,对应于新的
数据库中的文档,加上一条从服务器发送到服务器的 RPC 消息
进行原始插入的客户。
优化
这是我们绝对计划好的。
关于benchmarking - Meteor 在众多客户之间共享大量收藏时的效率如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13113256/
目录 1.通过多个键值将对象进行排序 2.数据类别 3.列表推导 4.检查对象的内存使用情况 5.查找最频繁出现的值 6.属性包
概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。
1 用户名正则 ? 1
正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了
用来循环容器的标签forEach,查看例子 foreach元素的属性主要有item,index,collection,open,separator,close。 item:集合中元素迭代时
JS的正则表达式 //校验是否全由数字组成 function isDigit(s) { var 
Docker 是一个基于Linux容器(LXC-linux container)的高级容器引擎,基于go语言开发,源代码托管在 Github 上, 遵从Apache2.0协议开源。Doc
整理了一下mysql基础命令,分享一下 ? 1
1、概述 在园子里面有很多关于各种技术细节的研究文章,都是比较牛逼的框架研究;但是一直没有看到关于怎么样提高开发效率的文章,大多提高开发效率的文章都是关于自动化等方面的辅助工具类型的,而不是开发
Python中的三角函数位于math模块内。 引入模块: import math 输出pi: import math print(math.pi) 得:3.141592653589793
网上关于SQL优化的教程很多,但是比较杂乱。近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充。 这篇文章我花费了大量的时间查找资料、修改、排版,希望大家阅读之后,
1、Oracle的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 ?
我想在 Meteor 中设置一个在客户端和服务器之间同步的 session 绑定(bind)值。我认为这应该在 Collection 中完成,因为 Session 在客户端和服务器之间不同步,对吧?不
我想以编程方式将字符串资源添加到可执行文件。仅出于示例目的,假设我正在尝试添加一个名为“String SO”的字符串,它包含“stringVal”的值 如果这对任何人有帮助 - 如果我要通过 VS.n
我是 C# 的新手。在 ASP.NET 3.5 (C# 3.0) 中工作。为了开发有效的代码,我需要熟悉哪些集合类?像 IList,和对应的 IList , List , List够了吗? 非常感谢大
字符串中字符大小写的变换 1. str.lower() //小写 >>> 'SkatE'.lower() 'skate' 2. str.upper() //大写 >>
wtfPython是github上的一个项目,作者收集了一些奇妙的Python代码片段,这些代码的输出结果会和我们想象中的不太一样; 通过探寻产生这种结果的内部原因,可以让我们对Python里的一
1.连接数据库 普通用户连接数据库: conn scott/tiger –(默认的用户名/密码)、conn 即”connection”连接数据库的意思 超级管理员连接: Conn sys/s
通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几个
我正在将一个 Swagger 规范文件导入 postman 以创建一个集合,这时,它可以按预期工作,并且该集合是随所有请求和子文件夹一起生成的,很好!但是,在更新api时,我需要更新 postman
我是一名优秀的程序员,十分优秀!