想象一下这段代码:
@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>
字符串
这段代码将得到用户的名字,并向用户问好。但是它是如何工作的呢?这是真的吗?
在Blazor WebAssembly中,它在客户端机器中像c#独立程序一样运行。但在BlazorServer中,它也是这样做的,但在服务器中而不是在客户端机器中,它使用SignalR将更新的UI发送到客户端。
1条答案
按热度按时间osh3o9ms1#
正如你所说,Blazor可以以两种方式运行,服务器端或客户端。
当它是客户端的时候,就像浏览器中的JavaScript一样。当页面加载时,代码被下载到客户端计算机上。当你点击按钮时,它在浏览器中运行,而不需要与服务器联系。
当运行服务器端Blazor时,客户端发生的任何事情都将从浏览器发送到服务器进行处理,然后发送回显示。
这种服务器/客户端事务发生的级别与大多数Web框架有点不同。
如果我们看三个不同的级别或服务器渲染:
1.带有HTML响应的表单提交。当客户端提交请求时,服务器返回HTML供浏览器呈现,所有数据都已内联在HTML中。这就是ASP.Net MVC,PHP和各种其他服务器端技术传统上的工作方式。这种方法通常在页面上的每次单击都通过HTTP传输一个完整的页面。
1.在Blazor服务器中,客户端和服务器之间有一个(接近)连续的来回连接,用户的每次点击都会在客户端和服务器之间来回传输,但每次都会发送完整的HTML页面或数据,只是进行最小的更改来更新页面。这发生在SignalR上,但也可能发生在Http或其他协议上,SignalR协议正是作为一种有效的真实的实时数据传输协议而被选用的。
正如@Crowcoder和@Adyson所提到的,SignalR是一个抽象,它主要使用websockets,有时也使用HTTP或其他技术。微软提供这个抽象很大程度上是因为WebSockets快速高效,但编码起来不舒服,也不稳定。而不是每个人都必须编写必要的代码来安全地使用WebSockets,SignalR将其 Package 在一个易于使用的API中。客户端和服务器之间的Blazor链接就是使用该抽象构建的。
这三个场景并不难区分。这三个层经常混合在一起,有很多如果和但是,以及位于边界某处的场景。然而,它们是常见的场景,有助于理解这两种类型的Blazor在Web框架中的位置。