SignalR 讲解
一、SignalR 介绍
SignalR 是一个用于实现实时 Web 应用程序的 .NET 库。它提供了一种简单而高效的方式来创建实时、双向和基于事件的通信应用程序。SignalR 可以用于构建各种类型的实时 Web 应用程序,如聊天、实时数据更新、实时通知等。
二、SignalR 工作原理
SignalR 通过在服务器和客户端之间建立一个持久连接来工作。这个连接可以是 HTTP 或 WebSocket,具体取决于客户端支持的协议。一旦连接建立,SignalR 可以将服务器端的事件或数据发送到客户端,同时也可以将客户端的输入发送回服务器端。
三、SignalR 架构
SignalR 架构包括以下几个主要组件:
- Hub:Hub 是 SignalR 的核心组件,它是一个连接服务器和客户端的接口。Hub 提供了一种简单的方式来定义服务器端的方法和事件,这些方法和事件可以被客户端调用。
- 连接器:连接器是 SignalR 的底层组件,它负责建立和管理服务器和客户端之间的连接。连接器可以处理各种协议,如 HTTP 和 WebSocket。
- 消息传递:SignalR 使用消息传递来在服务器和客户端之间进行通信。消息可以是文本、JSON 或其他格式。
- 传输协议:SignalR 支持多种传输协议,如 HTTP 长轮询、WebSocket 和 Server-Sent Events。传输协议的选择取决于客户端和服务器支持的协议。
四、SignalR 示例
下面是一个简单的 SignalR 示例,演示了如何使用 Hub 和 JavaScript 在服务器和客户端之间进行通信:
1. 创建 Hub 类:
csharp代码
public class ChatHub : Hub | |
{ | |
public Task Send(string message) | |
{ | |
return Clients.All.SendAsync("Receive", message); | |
} | |
} |
2. 在客户端使用 JavaScript 调用 Hub 方法:
javascript代码
// 连接到 SignalR Hub | |
var connection = new signalR.HubConnectionBuilder() | |
.withUrl("/chathub") | |
.configureLogging(signalR.LogLevel.Information) | |
.build(); | |
// 连接建立后调用 Send 方法发送消息 | |
connection.start().then(function () { | |
connection.invoke("Send", "Hello World!"); | |
}); |
3. 在客户端接收来自 Hub 的消息:
javascript代码
// 监听来自 Hub 的消息 | |
connection.on("Receive", function (message) { | |
console.log(message); | |
}); |
五、SignalR 下载链接
- SignalR Core:Download .NET Core 3.1 (Linux, macOS, and Windows)
- SignalR for ASP.NET Core:Download .NET Core 3.1 (Linux, macOS, and Windows)
- SignalR for ASP.NET Core SignalR for .NET Framework:NuGet Gallery | Microsoft.AspNetCore.SignalR 1.1.0