新IObservable/IObserver框架的系统。反应的图书馆进来。净4.0是非常令人兴奋的(见 链接)。

它可能为时过早推测,但将在那里也是一个(由于缺乏一个更好的词)IQueryable状的框架内为这些新的接口?

一个具体使用情况将是协助在预处理活动,在来源,而不是在链接听电话。例如,如果你有一个非常健谈的'事件接口,使用 Subscribe().Where(...) 将收到的所有事件通过管道和客户的过滤。

我想知道是否会有一个类似于IQueryableObservable,由此这皇宫的方法将被编入某些"聪明" Subscribe 实施中的一个来源。我可以想象某些网络服务器架构,可以使用这样一个框架。或者怎么样加到SQL服务器(或者任何关于这一问题),将允许。净码接收新数据的通知(触发器在代码)和将那些需要通知过滤服务器的一侧。

有帮助吗?

解决方案

嗯,你在最新版本的 Rx 中得到了它,以一个名为的接口的形式 IQ可观察 (发音为 IQueryableObservable)。请继续关注下周初发布的有关该主题的第 9 频道视频。

为了稍微定位此功能,人们应该意识到 Rx/Ix 难题在概念上存在三个正交轴:

  • 什么 数据模型是您的目标。在这里,我们找到了基于拉动的模型与基于推式的模型。他们的关系是建立在 二元性. 。这些世界之间存在着转变(例如可枚举)。
  • 在哪里 您执行驱动查询的操作(sensu lato)。某些运算符需要并发性。这是哪里 调度 IScheduler接口进来了。操作符的存在是为了在并发域之间跳转(例如观察)。
  • 如何 需要执行一个查询表达式。逐字 (IL) 或可翻译(表达式树)。他们的关系是建立在 同形性. 。两种表示之间存在转换(例如如可查询)。

所有 IQbservable 接口(它是 IQueryable 的双重接口和 IObservable 查询的表达式树表示)启用的是最后一点。有时,人们会将查询翻译行为(“如何”运行)与远程处理方面(“在何处”运行)混淆。虽然通常你会这样做 翻译 查询某些目标语言(例如 WQL、PowerShell、用于云通知服务的 DSQL 等)以及 偏僻的 将它们放入某个目标系统中,这两个问题都可以解耦。例如,您可以使用表达式树表示来执行 当地的 查询优化。

就可能的安全问题而言,这与 IQueryable 功能没有什么不同。通常,人们只会远程控制表达式语言,而不会远程控制任何“真正具有副作用”的运算符(无论这对于原教旨主义函数式语言之外的语言意味着什么)。特别是,订阅和运行操作保留在本地,并带您脱离可查询的 monad(因此触发翻译,就像 GetEnumerator 在 IQueryable 的世界中所做的那样)。我将留给读者想象如何远程控制订阅行为。

开始玩 最新位 今天让我们知道您的想法。另请继续关注即将推出的第 9 频道有关此新功能的视频,其中包括对其一些设计理念的讨论。

其他提示

虽然这听起来像一个有趣的可能性,我就会有关于实施这一若干保留。

1)正如可以不序列通过使用IQueryable的非平凡lambda表达式,这些序列化Rx之中将是同样困难。你可能会希望能够连载多行和lambda表达式作为这个框架的一部分。要做到这一点,你可能会需要实现像埃里克·梅杰的其他宠物项目 - 树妖和沃尔特

2),即使你可以序列这些lambda表达式,我会关心运行从客户端发送的服务器上任意代码的可能性。这很容易造成安全隐患远远大于跨站点脚本更大。我怀疑,允许客户发送表情到服务器的潜在利益远远大于安全漏洞影响执行。

<强> 8(现在10岁)的未来:我绊倒 Qactive (前RXX),一个 Rx.Net 基于可查询的反应性TCP服务器提供商 它是答案的“有问题的问题”

服务器

Observable
    .Interval(TimeSpan.FromSeconds(1))
    .ServeQbservableTcp(new IPEndPoint(IPAddress.Loopback, 3205));

<强>客户端

var datasourceAddress = new IPEndPoint(IPAddress.Loopback, 3205);
var datasource = new TcpQbservableClient<long>(datasourceAddress);

(
     from value in datasource.Query()
     //The code below is actually executed on the server
     where value <= 5 || value >= 8
     select value
)
.Subscribe(Console.WriteLine);

What's头脑吹一下这是一个客户端可以说些什么,以及如何频繁,他们想要的数据,他们接收和服务器仍然可以限制和控制的情况下,它是如何频繁和有多少数据返回。

有关此 https://github.com/RxDave/Qactive

另一个blog.sample

https://sachabarbs.wordpress.com/十二分之二千零十六/ 23 / RX-过度的线/

一个问题我很想看到与反应框架解决了,如果可能的话,正在使排放和subcription改变的通知从Web服务和其他只拉服务的缓存数据。

它的出现,根据一个新的channel9 采访, 那会有皇宫的支持 IObserver/IObservable 在BCL。净4.

然而,它将基本上是皇宫-对对象的风格查询,所以在这个阶段,它看起来并不像一个智能订阅'你把它。这就是尽可基本实现。净4.(从我的理解是从上面的采访)

具有说, ,反应框架(Rx)可有更多的详细实现的 IObserver/IObservable, 或者你可以写你自己的传递 Expression<Func...>Subscribe 参数,然后使用所表达的树 Func 订阅在一个更聪明的办法,适合的事件频道你是订阅。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top