6

目前似乎有几个选项可以使用 asp.net 进行异步/推送式编程。但是对于什么是最好的,什么是对开发人员最友好的方法,我有点困惑。我已经遇到的事情是,

节点

信号R

使用 PushStreamContent (Web API) 和类似 KnockoutJS 的东西

尽管SignalR 被认为可以支持 asp.net 4.5 ,但我看到MS中的 NodeJs 很受关注 (特别是在 Azure 周围)。任何人都可以阐明(至少是 NodeJs 和 SignalR 的)差异吗?

4

1 回答 1

15

SignalR 是“.NET 的客户端和服务器端库,它通过持久连接提供消息传递和抽象。” 这不会神奇地使您的代码异步 - 它只是允许您的服务器异步调用客户端(包括在用户浏览器中运行的 JavaScript)。

但是,.NET 4.5 和 Visual Studio 2012(以及Mono 2.11+)中附带的 C# 5.0 允许您通过使用新的async&await关键字来编写/修改代码以实现异步。

如果您已经是 .NET 开发人员,那么 C# async & await 和 SignalR 非常容易上手、学习和运行,让您能够构建高度可扩展的高性能系统。

Node.js 使您能够用 JavaScript 编写代码并将其托管在应用服务器中。

Node 目前受到了很多关注,但如果您来自 .NET 开发背景,那么在迁移到服务器上的 JavaScript 时,值得注意的一些事情可能会让您感到惊讶/烦恼:

  1. JavaScript 是一种非常强大且极其灵活的动态类型语言。但是,在您了解它的许多缺陷以及如何克服它们之前,这种灵活性可能是非常危险和有问题的。如果您必须执行 JavaScript 代码,请考虑使用TypeScriptCoffeeScript等语言编写源代码,它们可以编译为 JavaScript,但可以使您远离 JavaScript 的许多危险。

  2. 虽然 node 提供了强大的异步调度功能,但它的代码执行性能可能比执行 C# 慢得多。如果您的代码很少/不处理数据,您可能不会注意到这个问题。但是,如果您的代码进行了大量的数据处理/计算/分析等,您可能会发现节点的 JavaScript 性能下降是不可接受的。

  3. 节点是单线程的!如果您的代码必须执行一些繁重的处理,例如,对大量数据执行复杂的计算,它将阻止单个节点实例服务其他传入请求,直到每个处理操作完成。因此,您需要计划启用节点集群(目前是一项实验性功能),或者,如果您在 Windows 上托管节点,请使用 IIS 和 IISNode] 4,它使用(很棒的)IIS 和 Windows 进程激活基础架构处理节点实例管理。

  4. 与典型的 .NET 开发人员的调试经验相比,目前在 node 下调试代码是一个缓慢而繁琐的过程。这样做需要你使用 node-inspector 和 Chrome web 浏览器来调试代码,但是体验很差:断点不会在运行中保留;不支持条件断点;显示的调用堆栈很浅;等等

于 2012-05-15T20:26:35.463 回答