// SignalR 示例代码
// 1. 创建一个 Hub 类
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
public class ChatHub : Hub
{
// 定义客户端可以调用的方法
public async Task SendMessage(string user, string message)
{
// 调用所有连接的客户端上的 ReceiveMessage 方法
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
// 2. 配置 SignalR 在 Startup.cs 中
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// 添加 SignalR 服务
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
// 映射 SignalR 路由
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>("/chathub");
});
}
}
// 3. 客户端 JavaScript 代码 (使用 SignalR JavaScript 客户端库)
<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/5.0.9/signalr.min.js"></script>
<script>
const connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.build();
// 启动连接
connection.start().then(function () {
console.log("Connected to SignalR hub");
}).catch(function (err) {
console.error(err.toString());
});
// 定义接收消息的方法
connection.on("ReceiveMessage", function (user, message) {
const msg = `${user}: ${message}`;
console.log(msg);
});
// 发送消息
function sendMessage(user, message) {
connection.invoke("SendMessage", user, message).catch(function (err) {
return console.error(err.toString());
});
}
</script>
创建 Hub 类:ChatHub 继承自 Hub,并定义了一个 SendMessage 方法,该方法可以被客户端调用来发送消息。Clients.All.SendAsync 用于将消息广播给所有连接的客户端。
配置 SignalR:在 Startup.cs 中,通过 services.AddSignalR() 添加 SignalR 服务,并使用 endpoints.MapHub<ChatHub>("/chathub") 将 Hub 映射到 /chathub 路径。
客户端 JavaScript 代码:使用 SignalR 的 JavaScript 客户端库来建立与服务器的连接,并定义了 ReceiveMessage 方法来处理从服务器接收到的消息。sendMessage 函数用于向服务器发送消息。
希望这个示例能帮助你理解如何在 C# 中使用 SignalR 实现实时通信功能。
上一篇:c# restsharp
下一篇:c# nmodbus
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站