C# SignalR

2024 年 8 月 29 日 | 5 分钟阅读

引言

现代应用程序现在必须包含实时通信。这一切都归结为为用户提供及时更新。过去,实时通信是一项艰巨的任务,但由于有了 **SignalR**,这项任务变得容易多了。对于 .NET 应用程序,**SignalR** 库提供了实时通信功能。在本文中,我们将探讨 SignalR、其功能以及如何将其集成到 C# 应用程序中。

什么是 SignalR?

对于 .NET 应用程序,**SignalR** 库提供了实时通信功能。它允许您为应用程序添加实时功能,这意味着用户可以在发生更新时立即获得更新,而无需刷新页面。

SignalR 基于 WebSocket 协议,可实现服务器和客户端之间的实时通信。但除了这些协议之外,SignalR 还支持服务器发送事件 (SSE) 和长轮询。这意味着,如果 **WebSocket** 不可用,**SignalR** 将自动切换到其他协议之一,以确保通信仍然是实时的。

SignalR 如何工作?

**SignalR** 通过在客户端和服务器之间创建持久链接来工作。通过此链接,数据在客户端和服务器之间传输。每次客户端连接到服务器时,都会发送一个连接到服务器的请求。服务器作为响应提供的连接 ID 用于识别连接。

一旦连接成功建立,客户端和服务器都可以发送和接收消息。由于这个,两者现在可以实时通信。如果连接丢失,**SignalR** 将自动尝试重新连接。这确保了即使客户端或服务器短暂离线,连接也始终可用。

**SignalR** 还提供了一个基于 Hub 的 API,这使得它更容易使用。Hub 是一个高级 API,允许您将消息从服务器发送到客户端,反之亦然。它通过抽象出连接的低级细节来简化连接的使用。

在 C# 中使用 SignalR

现在我们已经了解了 SignalR 是什么以及它是如何工作的,让我们看看如何在 C# 应用程序中使用它。

第一步是安装 **SignalR** 包。您可以使用 **NuGet** 进行安装。打开 **NuGet** 包管理器控制台并键入以下命令:

C# 代码

安装完包后,我们就可以开始在应用程序中使用 **SignalR** 了。我们需要做的第一件事是创建一个 Hub。Hub 是一个继承自 Hub 类的类。它负责处理来自客户端的传入消息并将消息发送到客户端。

这是一个简单的 Hub 示例:

C# 代码

在此示例中,我们创建了一个名为 **MyHub** 的 Hub。它有一个名为 **Send** 的方法,该方法的参数之一是字符串消息。通过调用 Clients 对象上的 **broadcastMessage** 方法,**Send** 方法将消息广播给所有已连接的客户端。

下一步是在我们的应用程序中设置 **SignalR**。这在 **Startup** 类中完成。这是一个示例:

C# 代码

在此示例中,我们创建了一个 **Configuration** 方法,该方法接受一个 **IAppBuilder** 参数。我们在 app 对象上调用了 **MapSignalR** 方法,该方法在我们的应用程序中设置了 **SignalR**。

现在我们已经创建了一个 Hub 并配置了 **SignalR**,我们就可以在应用程序中使用它了。让我们创建一个简单的示例,演示如何使用 **SignalR** 在客户端和服务器之间发送信息。

首先,我们将在 UI 中创建一个简单的 HTML 页面,其中包含一个文本框和一个按钮。当用户在文本框中输入消息并单击按钮时,消息将被发送到服务器。

HTML 代码

在此示例中,我们包含了 **SignalR** JavaScript 库,并定义了一个名为 **myHub** 的客户端 Hub。我们还定义了一个名为 **broadcastMessage** 的方法,当从服务器接收到消息时将调用该方法。此方法仅将消息附加到无序列表元素。

我们还定义了一个按钮单击事件处理程序,该处理程序使用我们在 Hub 中定义的消息发送方法将消息发送到服务器。

现在,让我们更新我们的 Hub 以处理来自客户端的传入消息:

C# 代码

在此示例中,我们更新了 **Send** 方法以调用 Clients 对象上的 **broadcastMessage** 方法,并将消息作为参数传递。执行此操作后,所有已连接的客户端都将收到该消息。

最后,我们将更新我们的 **Startup** 类以映射我们的 Hub:

C# 代码

就是这样!现在,当我们运行我们的应用程序并在文本框中键入消息并单击 “发送” 按钮时,数据或信息将被发送到服务器,然后服务器会将消息广播到所有已连接的客户端。

结论

**SignalR** 是一个强大的库,它为 .NET 应用程序提供了实时通信功能。它允许您为应用程序添加实时功能,这意味着用户可以在发生更新时立即获得更新,而无需刷新页面。在本文中,我们探讨了 **SignalR** 是什么、它是如何工作的以及如何在 C# 应用程序中使用它。我们还提供了一个简单的示例,演示如何使用 **SignalR** 在客户端和服务器之间发送消息。使用 **SignalR**,您可以轻松地为应用程序添加实时通信功能,使其对用户更具交互性和吸引力。


下一主题throw vs throw ex