New*_*bie 42 blazor blazor-server-side blazor-webassembly
我是 Blazor 新手,正在尝试了解不同托管模型之间的差异。
根据我的阅读,我了解到 Blazor 服务器端和 Blazor WebAssembly Hosted 都有服务器端代码,两者都使用 Signal R 与客户端通信。
那么它们之间有什么区别呢?这些的客户端部署在哪里?他们与Server的连接有什么区别?如果 Web 应用程序依次调用第 3 方 Web API,则调用如何路由?
我发现的一个区别在于项目结构。Blazor 服务器端只有一个项目(带有数据文件夹)。Blazor WebAssembly Hosted 有 3 个项目(.Server、.Client 和 .Shared)。
Con*_*Low 65
主要区别在于 .NET 代码的运行位置:对于 Blazor Server,它 100% 在服务器端;而对于 Blazor Server,它是 100% 在服务器端。对于托管 Blazor WASM 应用程序,.NET 代码在服务器和客户端上运行(尽管服务器也可以运行您想要的任何其他语言或框架)。
从我读到的内容中,我了解到 Blazor 服务器端和 Blazor WebAssembly Hosted 有服务器端代码,...
确实如此,但看起来不一样。
...两者都使用 Signal R 与客户端通信。
不必要。Blazor Server 需要 Signal R 来不断地与客户端通信和更新,但 Blazor WASM 更加灵活。来自文档:
托管客户端应用程序可以使用各种消息传递框架和协议(例如Web API、gRPC-web和SignalR )通过网络与其后端服务器应用程序进行交互。
同样,Blazor WASM 对于服务器端来说是不可知的。托管模型为您生成服务器端,但从技术上讲您可以使用您想要的任何内容。
这些的客户端部署在哪里?
Blazor Server 不会编译客户端:一旦与应用程序建立连接,它就会利用 Signal R 通过 Web 套接字(或其他不可用的技术)持续将更新推送到客户端。
Blazor WASM是客户端:当您编译 WASM 项目时,您将得到类似于针对 React 应用程序运行 Webpack 的内容。Blazor WASM 是一种前端技术,因此它可以作为静态网页的依赖项,也可以通过 Web-API 进行增强和服务,就像托管模型一样。
他们与Server的连接有什么区别?
同样,Blazor Server 需要 Signal R,而 Blazor WASM 与技术无关:可以使用 Signal R,但通常您需要的只是标准 HTTP 协议。
如果 Web 应用程序依次调用第 3 方 Web API,则调用如何路由?
这是一个完全不同的问题,但我可以看到其中的困惑。您的 WebAPI 是一个完全独立的应用程序;如果您的 WASM 应用程序发出外部请求,那么它也不会变得更明智。
这些文档提供了以下见解(请注意,这并不能区分 WASM 的两种模型,但它仍然适用):
当创建用于部署的 Blazor WebAssembly 应用程序而无需后端 ASP.NET Core 应用程序来为其文件提供服务时,该应用程序称为独立Blazor WebAssembly 应用程序。当创建应用程序以使用后端应用程序进行部署以提供其文件时,该应用程序称为托管Blazor WebAssembly 应用程序。
Blazor WebAssembly (WASM) 托管模型具有多种优势:
- 从服务器下载应用程序后,不存在 .NET 服务器端依赖项,因此即使服务器脱机,应用程序仍可正常运行。
- 充分利用客户资源和能力。
- 工作从服务器转移到客户端。
- 托管应用程序不需要 ASP.NET Core Web 服务器。> - 无服务器部署方案是可能的,例如从内容交付网络 (CDN) 提供应用程序。
Blazor WebAssembly 托管模型具有以下限制:
- 该应用程序受限于浏览器的功能。
- 需要有功能的客户端硬件和软件(例如,WebAssembly 支持)。
- 下载大小较大,应用程序加载时间较长。
与 Blazor 服务器相比:
Blazor Server 托管模型具有多种优势:
- 下载大小明显小于 Blazor WebAssembly 应用程序,并且应用程序加载速度更快。- 该应用程序充分利用服务器功能,包括使用 .NET Core API。
- 服务器上的 .NET Core 用于运行应用程序,因此现有的 .NET 工具(例如调试)可以按预期工作。
- 支持瘦客户端。例如,Blazor Server 应用程序可与不支持 WebAssembly 的浏览器以及资源受限的设备配合使用。
- 应用程序的 .NET/C# 代码库(包括应用程序的组件代码)不向客户端提供。
Blazor Server 托管模型具有以下限制:
- 通常存在较高的延迟。每个用户交互都涉及一个网络跃点。
- 没有离线支持。如果客户端连接失败,应用程序将停止工作。
- 扩展具有许多用户的应用程序需要服务器资源来处理多个客户端连接和客户端状态。
- 需要 ASP.NET Core 服务器来为应用程序提供服务。无服务器部署方案是不可能的,例如从内容交付网络 (CDN) 提供应用程序。
Blazor Web Assembly 应用程序完全在客户端上运行。没有与服务器的 SignalR 连接:检查服务器program文件。服务器只是加载页面和 WASM 代码的托管平台,并提供应用程序使用的任何 API 控制器。这是一个标准的 DotNetCore Web 应用程序。
对第三方的任何 API 调用都会直接从运行 Web Assembly 应用程序的浏览器发送到第三方 URL。
请参阅我为另一个类似的 Stack Overflow 问题编写的要点,但我现在找不到。它描述了 Web Assembly 托管模板中的各个部分。 https://gist.github.com/ShaunCurtis/0ed8d257dff4d8497b97c88e5b2b30d0
| 归档时间: |
|
| 查看次数: |
39535 次 |
| 最近记录: |