【问题标题】:Best way to do async programming with Asp.Net使用 Asp.Net 进行异步编程的最佳方式
【发布时间】:2012-05-15 18:06:49
【问题描述】:

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

NodeJs

信号R

Using PushStreamContent (Web API) and something like KnockoutJS

尽管SignalR is deemed to make it to asp.net 4.5,我看到很多人对NodeJs within MS(尤其是Azure)很感兴趣。任何人都可以阐明(至少是 NodeJs 和 SignalR 的)差异吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    如果您已经是 .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下调试代码是一个缓慢而繁琐的过程。这样做需要你使用 node-inspector 和 Chrome web 浏览器来调试代码,但是体验很差:断点不会在运行中保留;不支持条件断点;显示的调用堆栈很浅;等等。

    【讨论】:

    • 不错的名单,但有几个明显的问题。 V8 javascript 引擎很快。它实际上非常快。在某些用例中,C# 更快,信不信由你,有些用例是 javascript 擅长的(正则表达式)。无论如何,这些都不太可能成为 Web 应用程序中的问题,因为如今几乎任何语言的代码执行都足够快。另一个问题是关于 javascript 的功能。虽然这是真的,但如果您使用 SignalR 和 Async,那么您最好也使用 C# 以函数方式编写代码。
    • 是的,我同意...... JavaScript 工具现在很糟糕,尤其是当你习惯了 Visual Studio 时。
    • 看来我会坚持使用 SignalR。不过,总得在某个时候尝试节点。求详细解答!
    • @Timothy:性能永远不容忽视。对于今天每个 2 核/实例云服务每月 100 美元以上的情况尤其如此!采用错误的技术可能会导致巨大的成本开销。我见过使用 node 会使 .NET 服务的成本增加三倍以达到相同性能水平的情况!
    • @RichardTurner 我很想就这一点进行更深入的对话,因为我不知道我是否完全同意。如果性能是大多数 Web 应用程序的关键因素,那么 Ruby on Rails 以及在较小程度上的 PHP 将不存在,也不会有成功的初创公司使用这些技术。显然情况并非如此,因此在确定您的平台时,必须有比执行速度更重要的因素。我还要争辩说,如果有人在 Node 中构建了一些需要 3 倍硬件才能获得同等性能的东西,对于 .NET 解决方案,他们使用 Node 是错误的。
    猜你喜欢
    • 2023-03-18
    • 2011-08-12
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    相关资源
    最近更新 更多