使用Asp.Net进行异步编程的最佳方法

时间:2012-05-15 18:06:49

标签: asp.net node.js asp.net-web-api signalr

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

的NodeJS

SignalR

Using PushStreamContent (Web API) and something like KnockoutJS

虽然SignalR is deemed to make it to asp.net 4.5,但我对NodeJ within MS(特别是Azure)感兴趣。任何人都可以了解差异(至少NodeJs和SignalR)?

1 个答案:

答案 0 :(得分:15)

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

然而,在.NET 4.5中提供的C#5.0& Visual Studio 2012(以及Mono 2.11+)允许您通过使用新的async&编写/修改代码以使其异步。 await个关键字。

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

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

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

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

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

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

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