代码之家  ›  专栏  ›  技术社区  ›  theburningmonk

无功扩展(Rx)能否跨过程或机器边界使用?

  •  10
  • theburningmonk  · 技术社区  · 15 年前

    依稀记得很久以前看到过一些关于这个的讨论,但之后什么都没听到。所以基本上你能在远程机器上订阅一个IObservable吗?

    7 回复  |  直到 11 年前
        1
  •  8
  •   Ana Betts    15 年前

        2
  •  5
  •   Contango    11 年前

    另一种可能的解决方案是使用命名管道。

    NamedPipeWrapper ,请参见 source on GitHub . 在这个库上编写一个瘦的RX包装器是很容易的,即订阅RX流并使用这个库将消息推送到其他.NET侦听进程。

    由于此解决方案使用命名管道,因此它将是一个真正的发布/订阅解决方案,支持不同进程中的多个订户。

    更新

    在命名管道库上编写简单的RX桥代码确实非常容易。使用RX Subject 并将RX桥代码插入到事件处理程序中。其两端的附加代码不超过4行。如果有人感兴趣,我可以把代码贴出来。

    更新

    有关命名管道的详细信息,请参见 .NET 3.5 Adds Named Pipes Support Interprocess Communication Using .NET 3.5 Named Pipes IO . 前面提到的NuGet包 NamedPipeWrapper 是.NET3.5引入的对命名管道的内置支持的一个更好的版本。

        3
  •  4
  •   theburningmonk    15 年前

    在9频道发现了这个很酷的视频 IObservable.远程 正如保罗所指出的:

    http://channel9.msdn.com/posts/J.Van.Gogh/Whats-different-about-the-3-versions-of-Rx-Part-3-NET-35-SP1/

    很有趣的东西,我现在要花点时间玩玩它!:-D

        4
  •  3
  •   Contango    11 年前

    如果安装NuGet包 rx-remoting ,它将安装组件 System.Reactive.Runtime.Remoting.dll 它提供对跨进程接收消息的支持。

    有关Microsoft的演示代码,请参阅 RX Across Processes . 我刚刚测试了这个页面上的代码,效果很好。为了使其能够编译,您需要添加以下引用:

    • NuGet : Reactive Extensions - Main Library (搜索 reactive extensions main
    • 努吉 : Reactive Extensions - .NET Remoting Support (搜索 reactive extensions remoting )
    • System.Runtime.Remoting (作为普通引用添加,此程序集随.NET一起提供)

    @theburningmonk提到的9频道视频也很有趣。

    更新

    不幸的是,此解决方案有一个很大的限制:只能有一个客户机进程侦听(所有后续客户机都无法连接)。 Pushqa 解决了这个问题(见我的另一个答案)。本质上,任何在发布/订阅信令总线上实现RX的库都应该做到这一点。

        5
  •  3
  •   Contango    11 年前

    对。

    退房 Pushqa .

    • 它很容易使用。我大概5分钟就起床跑步了。
    • 它适用于C#.NET、WPF、ASP.NET或Javascript。SignalR内置于ASP.NET中,但如果添加正确的NuGet包,它适用于任何C#.NET项目。
    • 它优于RX over.netremoting(请参阅我的另一个答案),因为我们可以有一个服务器和多个订户(它是一个真正的pub/sub模型,就像RX一样)。
      • 如果我们希望查询在客户端进行过滤,那么简单的方法就是对pushqa返回的结果进行客户端过滤。
    • Tibco corner cases dodecahedrons ). 除非您需要连接到传统的大型机客户端,或者希望通过UDP多播到数百个客户端,或者希望浪费大量的许可费,否则此解决方案远远优于Tibco。
    • 它是免费的。

    enter image description here

        6
  •  0
  •   Jacob    15 年前

    没有理由不设计一个框架来实现这一点。框架必须提供一种方法来寻址远程对象,为它们生成代理,然后跨应用程序边界封送远程对象的活动(即通过套接字通信)。NET远程处理可能是实现此功能的合适选项。WCF会更好。

        7
  •  0
  •   jrista    15 年前

    你有没有明确规定要用Rx来解决你的问题?WCF提供双工服务,客户机可以将回调端点注册到服务。然后,该服务可以根据需要发起对其客户机的回叫。它实际上是一种远程观察者模式。如果RX是必须的,那么使用RX支持框架包装WCF双工服务应该是相当困难的,它允许您的客户机使用IObservable“透明地”观察服务行为。