NetCore 下集成SignalR并进行分组处理
Tips:
1、注意跟普通版Net.MVC的前端处理方式不一样,以前可以connection.start()后直接done里面再做逻辑处理,现在不行了
建议做法是在具体的业务Hub里重写OnConnectedAsync事件,来为当前连接ID做分组等处理
2、目前版本只支持了websocket协议,还不支持Comet长连接方式
后台代码:
public class MessengerHub : Hub
{
private readonly IHttpContextAccessor _accessor;
public MessengerHub(IHttpContextAccessor accessor)
{
_accessor = accessor;
} //连上之后初始化Group
public override async Task OnConnectedAsync()
{
var connectionId = Context.ConnectionId;
var userInfo = _accessor.HttpContext.User.Identities.First(u => u.IsAuthenticated);
await Task.Run(() =>
{
this.Groups.AddAsync(Context.ConnectionId, _accessor.HttpContext.User.Identity.Name);
});
} //给指定Group客户端发送消息
public async Task SendToMessage(string sendTo, string title, string content, int duration = 3000)
{
var connectionId = Context.ConnectionId;
await Task.Run(() =>
{
sendTo.Split(',').ToList().ForEach(t =>
{
this.Clients.Group(t).InvokeAsync("SendToMessage", "", title, content, duration);
});
});
}
}
前端代码需要引入signalr-client.js,可以在Bower包里添加或者在Github上找下
前端关键代码:
//消息处理
let transportType = signalR.TransportType.WebSockets;
let http = new signalR.HttpConnection(`http://${document.location.host}/messengerHub`, { transport: transportType });
let connection = new signalR.HubConnection(http);
connection.start(); //setTimeout(connection.invoke('AddGroup'), 5000);
connection.on('SendToMessage', (sendTo, title, content, duration) => {
layer.open({
type: 1
, time: duration
, title: title
, offset: 'rb'//具体配置参考:http://www.layui.com/doc/modules/layer.html#offset
//, id: 'LAY_demo_rb' //防止重复弹出
, content: '<div id="MessageTips">' + content + '</div>'
});
});
注意这个地方注释掉的connection.invoke('AddGroup'),这个地方不能在前台JS里面做分组初始化
前台JS现在也不支持Done方法回调,所以写在了后台OnConnectedAsync方法里
客户端发送方法跟以前的版本不一样:connection.invoke('SendToMessage','Admin','标题','消息提示',2000);
NetCore 下集成SignalR并进行分组处理的更多相关文章
- 在ASP.NET Core下使用SignalR技术
一.前言 上次我们讲到过如何在ASP.NET Core中使用WebSocket,没有阅读过的朋友请参考 WebSocket in ASP.NET Core 文章 .这次的主角是SignalR它为我们提 ...
- signalr中Group 分组群发消息的简单使用
前一段时间写了几篇关于signalr的文章 1.MVC中使用signalR入门教程 2.mvc中signalr实现一对一的聊天 3.Xamarin android中使用signalr实现即时通讯 在平 ...
- NetCore log4net 集成以及配置日志信息不重复显示或者记录
NetCore log4net 集成,这是一个很常见而且网上大批大批的博文了,我写这个博文主要是为了记录我在使用过程中的一点小收获,以前在使用的过程中一直没有注意但是其实网上说的不清不楚的问题. 官方 ...
- .netcore下的微服务、容器、运维、自动化发布
原文:.netcore下的微服务.容器.运维.自动化发布 微服务 1.1 基本概念 1.1.1 什么是微服务? 微服务架构是SOA思想某一种具体实现.是一种将单应用程序作为一套小型 ...
- 用SignalR 2.0开发客服系统[系列4:负载均衡的情况下使用SignalR]
前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 用SignalR 2.0开发客服系统 ...
- 在Spring下集成ActiveMQ
1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spr ...
- 在spring环境下集成ActiveMQ
1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spr ...
- asp.net core 2.0集成signalr
在博客园也很多年了,一直未曾分享过什么东西,也没有写过博客,但自己也是汲取着博客园的知识成长的: 这两天想着不能这么无私,最近.NET CORE貌似挺流行的,闲来无事也自己搞了个asp.net cor ...
- 在SSL / https下托管SignalR
https://weblog.west-wind.com/posts/2013/Sep/23/Hosting-SignalR-under-SSLhttps 2013年9月23日•来自毛伊岛,HI• ...
随机推荐
- lvs+keepalived+vsftp配置FTP服务器负载均衡
LVS+Keepalive 实现服务器的负载均衡高可用一.安装两台机器的安装是一样的,这里只记录一遍.1. 下载LVS+Keepalive 所需安装包http://www.keepalived.org ...
- vue打包体积优化之旅
webpack 与 vue 在使用vue开发时,遇到打包后单个文件太大,因而需要分包,不然加载时间太久.虽然尽可能减少请求次数,但是单个包太大也不是好事 思路 组件按需加载 vue-router 的懒 ...
- JDK的KeyTool和KeyStore等加密相关
Keytool是一个有效的安全钥匙和证书的管理工具. Java 中的 keytool.exe (位于JDK\Bin下)可以用来创建数字证书,所有的数字证书是以一条一条(用别名区别,不区分大小)地存储在 ...
- hdu3829
题解: 对于每一个孩子裂点+建边 如果i孩子讨厌的和j孩子喜欢的相同,那么建边 然后跑最大独立集 代码: #include<cstdio> #include<cstring> ...
- 【Html 学习笔记】第七节——表单
文本框:<form> <input> </form> 密码域-文本框:<input type ="password" > 复选框:& ...
- APUE学习笔记——8.1-8.4 进程基础
进程ID 1 进程id是唯一的.(不会有进程id一样的两个进程) 2进程id是可复用的,一个进程销毁后,它的id号可以被新的进程使用.但是Unix采用了延迟复用的算法,也就是进程 销毁后它的id不 ...
- 2018-2019-2 网络对抗技术 20165210 Exp4 恶意代码分析
2018-2019-2 网络对抗技术 20165210 Exp4 恶意代码分析 一.实验目标 首先是监控你自己系统的运行状态,看有没有可疑的程序在运行. 其次是分析一个恶意软件,就分析Exp2或Exp ...
- Java并发编程之读写锁
读写锁维护了一对相关的锁,一个用于只读操作,一个用于写入操作.只要没有writer,读取锁可以由多个reader线程同时保持.写入锁是独占的. 可重入读写锁 ReentrantReadWriteLoc ...
- java入门学习(4)— 类,对象理解,如何创建类,对象
1.什么是类?具有一定相同的属性的对象的集合就叫类.2.对象:类的具体实例,就是类的实例化.比如学生是一个类(student),那学生里面的小红就是一个对象,一个有学生的属性的对象.3.如何定义一个类 ...
- Happy Swifting!
Happy Swifting! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ...