SignalR与响应式扩展的比较

45

SignalR和Reactive Extensions是相同的东西吗?你能解释一下为什么吗?


2
然而,SignalR可以帮助您在客户端上发布服务器端可观察对象。https://github.com/cburgdorf/SignalR.Reactive - Christoph
1个回答

97
不,它们绝对不是同一件事情。
Reactive Extensions 是用于创建和组合数据或事件的可观察流的库(它们实际上非常相似)。它基本上对客户端-服务器连接或其他事物一无所知。它专注于 Observable,并能将任何集合、流、事件、异步方法等封装成通用的 Observable 接口。
SignalR 是用于在客户端和服务器之间创建持久的双向连接的工具包。它通过 HTTP 工作,其目的是将 3 种低级技术(长轮询、服务器端事件和 WebSockets)包装成高级 API 进行舒适的开发。因此,它专注于通信。
因此,这两个组件本身相当独立,并且它们有完全不同的关注点。
另一方面,这两个伟大的库彼此互补:可以使用 SignalR 将事件从服务器推送到客户端,然后将服务器端事件封装成 RX 的 Observable 以创建复杂的响应式用户体验。
更新
Rx 就像 LINQ,它帮助您指定“发生什么”,但不涉及“如何”。SignalR 是一个用于实现实时网络通信的库 - Paul Betts
“LINQ to Objects” 和 “RX”的区别在于,在“LINQ to Objects”中,您从可枚举的东西中提取下一个项,而在 RX 中,它们从可观察的东西中向您推送。

20
+1,Rx类似于LINQ,它帮助你指定“发生了什么”,但不涉及“如何”详细实现。SignalR是一个库,用于实现实时网络通信的“如何”。 - Ana Betts
2
@PaulBetts +1 很好的与LINQ进行比较,RX就像是它的孪生兄弟。我已经在答案中添加了一句引用。 - Pavel Gatilov
1
FYI: Rx 是基于 LINQ 构建的。直到 Rx 出现之前,LINQ 主要与 IEnumerable<T> 接口一起使用。LINQ 是匿名类型、扩展方法、Lambda 表达式、表达式(树)和查询推导语法的组合语言特性。 - Lee Campbell
@LeeCampbell 确实。然而,LINQ术语经常与其特定实现混淆,该实现位于System.Linq.Enumerable类中,即_LINQ to Objects_。我将更新答案以使用_LINQ to Objects_以避免混淆。 - Pavel Gatilov
1
@marsop,也许不是孪生兄弟。据我所知,Ix 扩展了 LINQ,而 Rx 则是 LINQ + Ix 组合的反应式双面。但从 Ix 将 LINQ 的功能提升到与 Rx 相等的意义上来看,它们非常接近。 - Pavel Gatilov
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接