Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Blazor服务器在后端是如何工作的?_C#_Asp.net_Signalr_Blazor - Fatal编程技术网

C# Blazor服务器在后端是如何工作的?

C# Blazor服务器在后端是如何工作的?,c#,asp.net,signalr,blazor,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&q

想象一下这个代码:

@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中,它也会这样做,但在服务器中,而不是在客户端计算机中,它会使用Signal将更新的UI发送到客户端。

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

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

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

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

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

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

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

正如@Crowcoder和@Adyson Signal-R所提到的,Signal-R是一种抽象,主要使用websockets,有时使用HTTP或其他技术。微软提供这种抽象主要是因为WebSocket速度快、效率高,但编写代码不方便且不稳定。与每个人都必须编写必要的代码来安全使用WebSocket不同,Signal将其封装在esay中以使用API。客户端和服务器之间的Blazor链接是使用该抽象构建的


这三种情况并不难快速划分。这三个层次经常混合在一起,在边界的某个地方有很多如果、但是和场景。然而,它们是帮助理解这两种Blazor在web框架中的位置的常见场景。

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