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

时间:2020-05-17 09:27:59

标签: c# asp.net signalr blazor

想象一下这段代码:

@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中,它执行相同的操作,但是在服务器中而不是在客户端计算机中,并且它使用signalr将更新的UI发送到客户端。

1 个答案:

答案 0 :(得分:1)

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

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

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

此服务器/客户端事务发生的级别与大多数Web框架有所不同。

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

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

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

如@Crowcoder和@Adyson所述,Signal-R是一种抽象,主要使用websocket,有时使用HTTP或其他技术。 Microsoft提供了这种抽象,主要是因为WebSockets快速高效,但是令人讨厌并且不稳定。并非每个人都必须编写必要的代码来安全地使用websocket,SignalR都会将其包装起来以消耗API。客户端和服务器之间的Blazor链接是使用该抽象构建的。

这三个场景不难快速划分。这三层通常混合在一起,边界上有很多假设和场景。但是,它们是常见的场景,有助于了解两种类型的Blazor在Web框架环境中的位置。