Blazor 服务器在后端如何工作?

How does Blazor server work in the back end?

想象一下这段代码:

@page "/"

@code{
    string name;
    string greet;
}
@{
    void sayhello()
    {
        greet = $"Hello, {name}";
    } 
}
<span>Type your name : </span>
<input Type="Text" @bind="name" />
<br/>
<button @onclick="sayhello">Say hello!</button>
<hr/>
<h1>@greet</h1>

此代码将获取用户的姓名并向用户问好。但是它是如何工作的呢?这是真的? :在 Balazor WebAssembly 中,它像客户端计算机中的 c# 独立程序一样运行。但在 BlazorServer 中,它执行相同的操作,但在服务器中而不是在客户端计算机中,它使用信号器将更新的 UI 发送到客户端。

如您所说,Blazor 可以 运行 两种方式,服务器端或客户端。

当它在客户端时,就像浏览器中的 JavaScript 一样。当页面加载时,代码将下载到客户端计算机上。它在浏览器中 运行s,当您单击按钮时无需联系服务器。

当运行使用服务器端 Blazor 时,客户端发生的任何事情都会从浏览器发送到服务器进行处理,然后发回显示。

此 server/client 事务发生的级别与大多数 Web 框架略有不同。

如果我们查看三个不同的级别或服务器渲染: 1. 提交带有 HTML 响应的表单。当客户端提交请求时,服务器 returns HTML 供浏览器呈现,所有数据都已内联在 HTML 中。这就是 ASP.Net MVC、PHP 和其他各种服务器端技术传统上的工作方式。对于页面上的每次点击,此方法通常会通过 HTTP 传输完整的页面。

  1. AJAX/XHR 请求 API。该页面首先加载 HTML 和 JavaScript。当您单击页面上的按钮时,它会向服务器发送请求,服务器仅响应所需的数据,然后显示数据。此方法通常在加载时传输大量标记,然后仅在必要时传输数据。这是 Blazor WASM/Client 和单页应用程序框架 (SPA) 中使用的模型。

  2. 在 Blazor 服务器中,客户端和服务器之间有一个(近)连续的来回连接,用户的每次点击都在客户端和服务器之间来回传输,而是发送完整的HTML 每次页面或数据,只进行最小的更改以更新页面。这发生在 Signal-R 上,但也可能发生在 Http 或其他协议上,Signal-R 只是被选为实时数据传输的有效协议。

正如@Crowcoder和@Adyson所说,Signal-R是一种抽象,主要使用websockets,有时也使用HTTP或其他技术。抽象是由 Microsoft 提供的,主要是因为 WebSockets 快速高效,但编码不愉快且不稳定。 SignalR 无需每个人都必须编写必要的代码来安全地使用 websockets,而是将其包装在一篇文章中以供使用 API。客户端和服务器之间的 Blazor link 是使用该抽象构建的。

这三种情况不难快速划分。这三层经常混合在一起,边界上的某个地方有很多如果、但是和场景。但是,它们是有助于了解两种类型的 Blazor 在 Web 框架环境中所处位置的常见场景。