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

Ill*_*ati 6 asp.net node.js signalr asp.net-web-api

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

的NodeJS

SignalR

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

虽然SignalR被认为是asp.net 4.5,但我对MS中的 NodeJ (特别是Azure)感兴趣 .任何人都可以了解差异(至少NodeJs和SignalR)?

Ric*_*ner 15

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

但是,.NET 4.5和Visual Studio 2012(以及Mono 2.11+)中的C#5.0 允许您通过使用新的async&awaitkeywords 来编写/修改代码以使其异步.

如果您已经是.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-inspector和Chrome Web浏览器来调试代码,但体验很差:断点不会在运行时保留; 不支持条件断点; 显示的调用栈很浅; 等等