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

问题描述 投票:0回答:1

想象一下这段代码。

@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发送给客户端。

c# asp.net signalr blazor
1个回答
2
投票

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

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

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

这种serverclient事务发生的层次与大多数Web框架有些不同。

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

  1. AJAXXHR请求到API。页面开始加载HTML和JavaScript。当你点击页面上的按钮时,它会向服务器发送一个请求,服务器只响应所需的数据,然后显示数据。这种方法通常在加载时传输大量的标记,然后只在必要时传输数据。这就是Blazor WASMClient和单页应用框架(SPA)中使用的模式。

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

正如@Crowcoder和@Adyson提到的那样,Signal-R是一个抽象,主要使用websockets,有时也会使用HTTP或其他技术。这个抽象是微软提供的,主要是因为WebSockets速度快,效率高,但是代码不好看,不稳定。SignalR不需要大家写必要的代码来安全地使用websockets,而是将其封装在一个esay中来消耗API。客户端和服务器之间的Blazor链接就是利用这个抽象建立起来的。

这三个方案并不是硬性的划分。这三层经常混在一起,有很多ifs和buts以及位于边界的某个场景。不过,它们都是常见的场景,有助于理解两种类型的Blazor在Web框架环境中的位置。

© www.soinside.com 2019 - 2024. All rights reserved.