服务器端引入包 Install-Package Microsoft.AspNetCore.SignalR
客户端引入包  npm install @aspnet/signalr
 <template>
<div><p>测试SignalR后台推送消息</p><p>ConnectionId {{connectId}}</p> {{retData}}</div>
</template> <script>
import * as signalR from '@aspnet/signalr'
export default {
data() {
return {
retData: '',
connection: "",
connectId:""
}
},
methods: {
},
created: function () {
let thisVue = this; //1 客户端创建连接
let connection = new signalR.HubConnectionBuilder()
.withUrl('/api/chathub')
//.withUrl('/chathub',signalR.HttpTransportType.WebSockets)//手动指定传输方式, 请在withUrl()方法的第二个参数
.build(); //2 监听服务器端发送的方法
connection.on('someFunc', function (obj) {
thisVue.retData =obj.radom ;
});
connection.on('receiveupdate', function (obj) {
thisVue.retData =obj ;
});
connection.on('getconnectId', function (obj) {
thisVue.connectId = obj.connectId
});
connection.on('finsied', function () {
connection.stop();
thisVue.retData = "finished"
}); //3 开始通信,并调用服务器端方法GetLatestCount
connection.start()
//.then(() => {connection.invoke('GetLatestCount', 1);thisVue.retData = "started"})
.catch(err => console.error(err.toString()));
}
}
</script>

前端代码

startup.cs添加代码

services.AddSignalR();

app.UseSignalR(route =>
{
route.MapHub<ChatHub>("/api/chathub");
});

Startup

写一个Hub中心代码,继承自Hub类

引入包 
public class ChatHub : Hub
{
public string connectionId = "";
//客户端调用服务器端的GetLatestCount方法
//服务器端调用客户端的receiveupdate方法(前端监听)
public async Task GetLatestCount(string random)
{
int count = ;
do
{
count++;
Thread.Sleep();
await Clients.All.SendAsync("receiveupdate", random + " " + count);
} while (count < ); await Clients.All.SendAsync("finsied");
} public override async Task OnConnectedAsync()
{
var connectionId = Context.ConnectionId;
//await Groups.AddToGroupAsync(connectionId, "mygroup");
//await Groups.RemoveFromGroupAsync(connectionId, "mygroup");
//await Clients.Group("mygroup").SendAsync("someFunc", new { radom = "0.0" }); await Clients.Client(connectionId).SendAsync("getconnectId", new { connectId = connectionId });
}
}

ChatHub

控制器中模拟触发后端推送请求

 [Produces("application/json")]
[Route("api/chat")]
public class ChatHubController : Controller
{
private readonly IHubContext<ChatHub> _hubContext;
public ChatHubController(IHubContext<ChatHub> hubContext)
{
_hubContext = hubContext;
} //测试消息实时推送
[HttpPost]
public async Task<IActionResult> Post()
{
await _hubContext.Clients.All.SendAsync("someFunc", new { radom = new Random().Next(,)});
return Ok();// Accepted(1);//202 请求已接收并处理,但还没有处理完成
}
}

ChatHubController

.netcore signalR 实时消息推送的更多相关文章

  1. WebForm SignalR 实时消息推送

    原文:https://www.jianshu.com/p/ae25d0d77011 官方文档:https://docs.microsoft.com/zh-cn/aspnet/signalr/ 实现效果 ...

  2. 基于SignalR的消息推送与二维码描登录实现

    1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...

  3. AngularJS+ASP.NET MVC+SignalR实现消息推送

    原文:AngularJS+ASP.NET MVC+SignalR实现消息推送 背景 OA管理系统中,员工提交申请单,消息实时通知到相关人员及时进行审批,审批之后将结果推送给用户. 技术选择 最开始发现 ...

  4. Signalr实现消息推送

    一.前言 大多数系统里面好像都有获取消息的功能,但这些消息来源都不是实时的,比如你开两个浏览器,用两个不同的账号登录,用一个账号给另外一个账号发送消息,然而并不会实时收到消息,必须要自己手动F5刷新一 ...

  5. 开源实时消息推送系统 MPush

    系统介绍 mpush,是一款开源的实时消息推送系统,采用java语言开发,服务端采用模块化设计,具有协议简洁,传输安全,接口流畅,实时高效,扩展性强,可配置化,部署方便,监控完善等特点.同时也是少有的 ...

  6. 基于socket.io的实时消息推送

    用户访问Web站点的过程是基于HTTP协议的,而HTTP协议的工作模式是:请求-响应,客户端发出访问请求,服务器端以资源数据响应请求. 也就是说,服务器端始终是被动的,即使服务器端的资源数据发生变化, ...

  7. Worktile中百万级实时消息推送服务的实现

    Worktile中百万级实时消息推送服务的实现 出自:http://blog.jobbole.com/81125/

  8. 【js学习】js连接RabbitMQ达到实时消息推送

    js连接RabbitMQ达到实时消息推送 最近在自己捯饬一个网站,有一个功能是需要后端处理完数据把数据发布到MQ中,前端再从MQ中接收数据.但是前端连接MQ又成了一个问题,在网上搜了下资料,点进去一篇 ...

  9. 未读消息(小红点),前端与 RabbitMQ实时消息推送实践,贼简单~

    前几天粉丝群里有个小伙伴问过:web 页面的未读消息(小红点)怎么实现比较简单,刚好本周手头有类似的开发任务,索性就整理出来供小伙伴们参考,没准哪天就能用得上呢. 之前在 <springboot ...

随机推荐

  1. SQLSERVER中计算某个字段中用分隔符分割的字符的个数

    比如字段sid中用'|'分割的一些字符   a|b|c|d,需要通过sql查询出字符的个数是4. 可以使用如下脚本: SELECT LEN(sid)-LEN(REPLACE(sid,'|',''))+ ...

  2. NavigatorOnLine.onLine——判断设备是否可以上网

    概述:返回浏览器的联网状态.正常联网(在线)返回true,不正常联网(离线)返回false.一旦浏览器的联网状态发生改变,该属性值也会随之变化. 1.语法 let online = window.na ...

  3. GNU,GPL与自由软件

    GNU 是 Richard Stallman(理查德·斯托曼)创建的一个项目,not unix GPL(General Public License),GNU通用公共许可证.书面上的协议 自由软件与开 ...

  4. 多态——virtual

    作用:解决当使用基类的指针指向派生类的对象并调用派生类中与基类同名的成员函数时会出错(只能访问到基类中的同名的成员函数)的问题,从而实现运行过程的多态 不加virtual #include<io ...

  5. Iterator 其实很简单(最好理解的工厂模式的例子)

    我们都知道Iterator是一个典型的工厂模式的例子.那么我们可能会被这两个名词搞晕.首先,我们会奇怪,为什么iterator可以遍历不同类型的结合,其次,出入程序猿的我们根本不知道工厂模式是什么. ...

  6. RabbitMQ中初始化ConnectionFactory常用设置属性

    初始化ConnectionFactory 代码 ConnectionFactory factory = new ConnectionFactory(); factory.setHost(ip); fa ...

  7. Python一些细节

    1.python set() dict() 有序问题,不同版本之间的差异,与Java/C++的对比 https://www.cnblogs.com/niuxichuan/p/11608386.html ...

  8. 基于栈的指令集与基于寄存器的指令集详细比对及JVM执行栈指令集实例剖析

    基于栈的指令集与基于寄存器的指令集详细比对: 这次来学习一些新的概念:关于Java字节码的解释执行的一种方式,当然啦是一些纯理论的东东,但很重要,在之后会有详细的实验来对理论进行巩固滴,下面来了解一下 ...

  9. Java&Selenium截图方法封装

    Java&Selenium截图方法封装 package util; import org.apache.commons.io.FileUtils; import org.openqa.sele ...

  10. nuxt入门

    之前一直都是做vue-spa单页面,不利于SEO.而便于SEO的SSR(服务器端渲染)多页应用,可以使用nuxt.js这个框架来实现 (0)nuxt安装 npx create-nuxt-app < ...