首页 > 编程语言 >C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用

时间:2022-10-03 15:34:19浏览次数:59  
标签:function 插件 console C# connection var message 弹窗


C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用

运行效果:

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_microsoft

1、安装Microsoft.AspNetCore.SignalR(安装方法自行百度)

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_microsoft_02

2、引入chat.js、signalr.js(请自行百度下载)

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_css_03

3、新建ChatHub.cs

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_css_04

ChatHub.cs代码:

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_microsoft_05

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

namespace YiSha.Admin.Web
{
public class ChatHub : Hub
{
public async Task SendMessage(string msg)
{
await Clients.All.SendAsync("ReceiveMessage", msg);
}
}
}

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_microsoft_05

4、服务端后台处理程序,新建MyBackgroundService.cs

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_microsoft_07

MyBackgroundService.cs代码:

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_microsoft_05

using Microsoft.Extensions.Hosting;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace YiSha.Admin.Web
{
public class PopupMessage : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
try
{
//需要执行的任务
var pm = new Controllers.HomeController(Controllers.HomeController.HC);//HC为Controller中定义的ChatHub的静态上下文变量
//弹窗消息处理
await pm.PopupMessage(DateTime.Now.ToString() + "hahaha");

}
catch (Exception ex)
{
//LogHelper.Error(ex.Message);
}
await Task.Delay(5000, stoppingToken);//等待5秒
}
}
}
}

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_microsoft_05

5、前端页面(整个项目的首页index)

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_microsoft_10

在index.cshtml中引入

<script src="~/yisha/js/SignalR/signalr.js"></script>

<script src="~/yisha/js/iziToast/iziToast.js" type="text/javascript"></script>

 

在index.cshtml的<script>中添加如下代码:(其中【对接收到的消息进行处理、显示】是弹窗消息插件调用方法,弹窗消息插件的其他细节在本文的最后给与详细介绍)

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_microsoft_05

var connection = new signalR.HubConnectionBuilder().withUrl("/chathub").build();

connection.on("ReceiveMessage", function (data) {
var encodedMsg = data.msg;//获取接收到的消息内容
//对接收到的消息进行处理、显示
iziToast.success({
title: 'OK',
message: encodedMsg,
position: 'bottomRight',
transitionIn: 'bounceInUp',
//transitionIn: 'flipInX',fadeInDown
transitionOut: 'flipOutX',
// iconText: 'star',
onOpen: function(){
console.log('callback abriu! success');
},
onClose: function(){
console.log("callback fechou! success");
},
buttons: [
['<button>Photo</button>', function (instance, toast) {

}],
]
});

iziToast.warning({
title: 'Caution',
message: 'You forgot important data',
position: 'bottomRight',
transitionIn: 'bounceInUp',
transitionOut: 'flipOutX'
});

iziToast.error({
title: 'Error',
message: 'Illegal operation',
position: 'bottomRight',
transitionIn: 'bounceInUp'
});

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

async function start() {
try {
await connection.start({ transport: ['webSockets'] });
console.log("connected");
} catch (err) {
console.log(err);
setTimeout(() => start(), 5000);
}
};

connection.onclose(async () => {
start();
});

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_microsoft_05

6、index对应的controller

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_json_13

在index对应的controller中添加如下代码:

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_microsoft_05

#region SignalR
public static IHubContext<ChatHub> HC;

private IHubContext<ChatHub> _hubContext;

public HomeController(IHubContext<ChatHub> hubContext)
{
this._hubContext = hubContext;
HC = hubContext;
}
public async Task<IActionResult> PopupMessage(string message)
{
if (_hubContext == null) return Json(new { code = "0", msg = "" });
await _hubContext.Clients.All.SendAsync("ReceiveMessage", new { msg = message });
return Json(new { code = "success", msg = "发送成功" });
}
#endregion

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_microsoft_05

7、修改startup.cs

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_microsoft_16

在startup.cs的ConfigureServices中添加如下代码:

services.AddSignalR();
services.AddSingleton<Microsoft.Extensions.Hosting.IHostedService, PopupMessage>();

在startup.cs的Configure中添加如下代码:

app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>("/chathub");

});

至此,SignalR的整个处理过程就完成了

下面介绍一下前端消息弹窗插件的实现方法,非常美观实用(下载地址:https://www.jq22.com/jquery-info11777)

1、插件下载及导入项目

C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用_json_17

2、在index的模板中引入插件CSS

<link rel="stylesheet" href="~/yisha/css/iziToast/iziToast.min.css">
<link rel="stylesheet" href="~/yisha/css/iziToast/demo.css">

3、在index中引入插件js(参见上面第5步)

<script src="~/yisha/js/iziToast/iziToast.js" type="text/javascript"></script>

4、在index中调用弹窗显示方法(参见上面第5步)

//对接收到的消息进行处理、显示
iziToast.success({
title: 'OK',
message: encodedMsg,
position: 'bottomRight',
transitionIn: 'bounceInUp',
//transitionIn: 'flipInX',fadeInDown
transitionOut: 'flipOutX',
// iconText: 'star',
onOpen: function(){
console.log('callback abriu! success');
},
onClose: function(){
console.log("callback fechou! success");
},
buttons: [
['<button>Photo</button>', function (instance, toast) {

}],
]
});

iziToast.warning({
title: 'Caution',
message: 'You forgot important data',
position: 'bottomRight',
transitionIn: 'bounceInUp',
transitionOut: 'flipOutX'
});

iziToast.error({
title: 'Error',
message: 'Illegal operation',
position: 'bottomRight',
transitionIn: 'bounceInUp'
});


此代码已测试成功,如果有问题请反馈

chat.js源码

"use strict";

var connection = new signalR.HubConnectionBuilder().withUrl("/chathub").build();

//Disable send button until connection is established
//document.getElementById("sendButton").disabled = true;

connection.on("ReceiveMessage", function (user, message) {
var msg = message.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
var encodedMsg = user + " says " + msg;
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.js下载链接:

https://www.bootcdn.cn/signalr.js/

 



标签:function,插件,console,C#,connection,var,message,弹窗
From: https://blog.51cto.com/u_11990719/5730375

相关文章

  • LeetCode 2365. Task Scheduler II
    原题链接在这里:https://leetcode.com/problems/task-scheduler-ii/题目:Youaregivena 0-indexed arrayofpositiveintegers tasks,representingtasksthatneed......
  • pycharm,pyside6,第一个图形界面
      保存为 Main.ui在Pycharm中,右击这个文件,  会执行命令,转换为py文件 ui_Main.pyMain.py 代码如下fromPySide6.QtWidgetsimportQApplication,QMainWindowfrom......
  • idea Mac格式化代码快捷键
    ideaMac格式化代码快捷键:Command+option+L优秀不够,你是否无可替代软件测试交流QQ群:721256703,期待你的加入!!欢迎关注我的微信公众号:软件测试君......
  • 讲讲TCP三次握手、四次挥手,为什么要三次握手、四次挥手?
    在介绍三次握手和四次挥手之前,先介绍一下TCP头部的一些常用字段。序号:seq,占32位,用来标识从发送端到接收端发送的字节流。确认号:ack,占32位,只有ACK标志位为1时,确认序号字段......
  • sessionStorage与localStorage 设置与获取
        <!DOCTYPEhtml><html><head><title>本地存储</title><script>functionsetSessionStorage(){//添加sessionStoragevarname......
  • vscode中快速声明数据类型
    如何快速声明数据类型上面这张图letobj1=reactive({listArr:[],backArr:[{name:'张三',age:10,info:'本科'}],age:100,name:'',flag:......
  • Contrastive Learning for Cold-Start Recommendation阅读笔记
    动机本文是2021年ACMMM上的一篇论文。之前关于推荐系统冷启动的工作很多都使用神经网络来探索冷物品的特征内容和协同表示之间的联合效应,但是作者认为这些工作很少探索内......
  • 在项目中全局配置 TypeScript 文件类型声明
    全局配置ts文件类型声明-产生的原因有些时候,某几个类型声明在项目中很多次都在使用。我们可以将它抽取成为一个文件。1.可以将这个文件中的类型声明成为全局的。2.在需......
  • docker compose部署项目【杭州多测师_王sir】【杭州多测师】
    1、把Apache-jmeter和docker-compose.yml文件2、dockerfile-项目名称-agent3、dockerfile-项目名称-demo4、项目名称-agent.jar和项目名称-demo.jar文件都放在同一个目......
  • centos7中安装delly软件
     001、系统[root@localhosthome]#cat/etc/redhat-releaseCentOSLinuxrelease7.9.2009(Core) 方法1conda安装01、创建python环境[root@localhosthome]......