程序员开发实例大全宝库

网站首页 > 编程文章 正文

SignalR在asp.net core中简单使用(入门篇)

zazugpt 2024-08-12 03:21:43 编程文章 31 ℃ 0 评论

引言

在现代web开发中常常需要消息的及时性或者说数据的实时性,现在WebSocket的出现让这样的需求变得简单,而现实中也出现了对WebSocket的一些封装或者扩展,Signalr的底层采用的是优先websocket实现,同时兼顾其它方式,在asp.net core中我们就可以使用Signalr来进行服务器端的主动推送来实现将数据实时推送到客户端,我们使用一个简单的例子来了解下SignalR的使用。

新建项目

我们新建一个asp.net core web的项目,我这里使用的是VS2019版本,名称自己随意起,然后我们先安装项目中依赖的一些js,服务端项目自带,我们按照我的截图一步步来(以下案例来自微软官方),在本地测试通过

  • 右击项目打开添加-客户端库

我们在弹出的窗口提供程序选择unpkg,然后在库中填入@aspnet/signalr@1,回车

这个地方我么选择压缩的或者不压缩的都可以,在生产环境下使用压缩的就可以了。下面我们先进行服务端一些代码的编写

  • 新建一个继承自Hub类,这是Signalr所需要的

我这里新建一个Myhub文件夹,然后新建了一个ChatHub类,代码内容很简单,如下(记得添加using Microsoft.AspNetCore.SignalR;命名空间)

using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;

namespace WebApp.MyHub
{
 public class ChatHub : Hub
 {
 public async Task SendMessage(string user, string message)
 {
 //广播消息
 await Clients.All.SendAsync("ReceiveMessage", user, message);
 }
 }
}

ChatHub 类继承自 SignalR Hub 类。 Hub 类管理连接、组和消息。可通过已连接客户端调用 SendMessage,以向所有客户端发送消息。

  • 配置 SignalR

在asp.net core中我们需要配置一下Signalr,我们在ConfigureServices中加入

 services.AddSignalR();

然后在Configure中加入(在app.UseMvc之前加入)

 app.UseSignalR(routes =>
 {
 routes.MapHub<ChatHub>("/chatHub");
 });

以上就是我们服务端的所有代码,接下来我们简单的写一个客户端

  • 新建index.html

在wwwroot文件夹下创建一个index.html和chat.js

引入signalr.js和chat.js

//index.html
<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8" />
 <title></title>
 <link rel="stylesheet" href="./lib/bootstrap/dist/css/bootstrap.css" />
</head>
<body>
 <div class="container">
 <div class="row"> </div>
 <div class="row">
 <div class="col-2"> </div>
 <div class="col-6">
 用户<input type="text" id="userInput" class="form-control" />
 <br />
 消息<input type="text" id="messageInput" class="form-control" />
 <br />
 <br />
 <br />
 <input type="button" id="sendButton" value="发送消息" class="btn btn-success" />
 </div>
 </div>
 <div class="row">
 <div class="col-12">
 <hr />
 </div>
 </div>
 <div class="row">
 <div class="col-6"> </div>
 <div class="col-6">
 <ul id="messagesList"></ul>
 </div>
 </div>
 </div>
 <script src="./lib/@aspnet/signalr/dist/browser/signalr.min.js"></script>
 <script src="./js/chat.js"></script>
</body>
</html>

//chat.js
"use strict";
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();


//建立连接之前,按钮不可用
document.getElementById("sendButton").disabled = true;


connection.on("ReceiveMessage", function (user, message) {
 //var msg = message.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
 var encodedMsg = user + ":" + message;
 var li = document.createElement("li");
 li.textContent = encodedMsg;
 document.getElementById("messagesList").appendChild(li);
});


connection.start().then(function () {
 document.getElementById("sendButton").disabled = false;
}).catch(function (err) {
 return console.error(err.toString());
});


document.getElementById("sendButton").addEventListener("click", function (event) {
 var user = document.getElementById("userInput").value;
 var message = document.getElementById("messageInput").value;
 connection.invoke("SendMessage", user, message).catch(function (err) {
 return console.error(err.toString());
 });
 event.preventDefault();
});

到此为止,一个简单的SignalR客户端和服务端就实现了,接下来我们启动测试一下项目,如下图

我们打开三个标签测试结果

如下图所示,发送的消息实时的传到了客户端并进行了展示,我们可以将更多的数据放到消息中传递,Signalr或者说webSocket的应用非常广泛,大屏展示,实时发送通知,服务器硬件监测以及聊天应用都可以实现。由于我本人也是第一次接触,更深入的内容还需要在项目中慢慢学习。

总结

最近工作共遇到了很多新的知识点,必须要一点一点,仔细的琢磨,慢慢深入到核心技术,选择适合自己的来学习,可能现在国内学习C#的人不是很多,但是学习依然是值得学习了,不断的总结经验,提升自己,希望大家共同进步!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表