【问题标题】:How does Blazor server work in the back end?Blazor 服务器如何在后端工作?
【发布时间】:2020-05-17 09:27:59
【问题描述】:

想象一下这段代码:

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

【问题讨论】:

  • SignalR 是一种用于在两个程序之间发送实时消息的技术。 SignalrR 集线器是维护服务器与其客户端之间的连接的服务器组件。一个简单的谷歌搜索会告诉你。这真的是你的问题,还是你有更深层次的问题?你有没有试过自己研究这些?
  • SignalR 是对 websockets 的抽象,所以你不需要在底层了解或学习它。
  • @Crowcoder 它尽可能使用 websockets,但如果需要,它也可以使用其他几种传输方式,而不需要程序员更改应用程序代码 - 这是它的一个不错的功能。
  • @ADyson,是的,我倾向于忘记这一点,因为我使用的是本世纪以来的浏览器,但这是一个很好的观点。
  • @Crowcoder true,尽管浏览器也不是唯一可以存在的 SignalR 客户端类型。因此,也许其他一些客户端也可能需要其他传输类型,具体取决于它们的编写方式/运行位置。但是,是的,您希望任何现代的东西都能支持 websocket。

标签: c# asp.net signalr blazor


【解决方案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 是一种抽象,主要使用websockets,有时也使用HTTP 或其他技术。抽象是由 Microsoft 提供的,主要是因为 WebSockets 快速高效,但编写起来不愉快且不稳定。 SignalR 无需每个人都必须编写必要的代码来安全地使用 websockets,而是将其封装在一篇文章中以使用 API。客户端和服务器之间的 Blazor 链接是使用该抽象构建的。

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

【讨论】:

    猜你喜欢
    • 2021-04-20
    • 2021-12-09
    • 2020-12-25
    • 1970-01-01
    • 2013-06-05
    • 2021-05-28
    • 2020-05-15
    • 2020-01-05
    • 2021-03-21
    相关资源
    最近更新 更多