SignalR向部分客户端进行消息推送

前置笔记:

关于SignalR的身份认证问题_董厂长的博客-CSDN博客

之前做Task的解决方案是不同的功能对应不同的Hub,分开进行消息推送。应付简单的场景是足够的。后期复杂场景可能会出现单个HUB向部分客户端发送消息。

举个栗子:聊天室的demo下,北京客户端 和 上海客户端链接是同一个hub,但是需求是单个hub向上海客户端发消息。

不要局限于聊天室功能,再举个栗子,OA流程的请假功能,OA通知到Hub,Hub通知到领导。hub肯定不会sendAllAsync( )给所有的同事。

主要思路:筛选客户端 

1、客户端筛选的3个参数:ConnectionId用户Id

(用户id就是对应登录的时候ClaimTypes.NameIdentifier的Claim)。

2、Hub的Groups属性为IGroupManager属性,可以对组成员进行管理。查看类型的成员。

3、Hub的Clients属性为IHubCallerClients类型,可以对连接到当前集线器的客户端进行筛选。查看类型的成员。

4、IClientProxy类型。无法知道具体有哪些客户端调用SendAsync()方法向筛选的客户端发送消息。

5、实现聊天室私聊。

1、public async Task<string> SendPrivateMessage(string destUserName,string message)
{
	User? destUser = Users.FindByName(destUserName);
	string destUserId = destUser.Id.ToString();
	string srcUserName = this.Context.User!.FindFirst(ClaimTypes.Name)!.Value;
	string time = DateTime.Now.ToShortTimeString();
    // 看这里 傻逼 重点代码在这里
 	await this.Clients.User(destUserId).SendAsync("ReceivePrivateMessage",
 		srcUserName, time, message);
 	return "ok";
}

2、const ret = await connection.invoke("SendPrivateMessage", destUserName, msg);

connection.on('ReceivePrivateMessage', (srcUser,time,msg) => {
	state.messages.push(srcUser+"在"+time+"发来私信:"+msg);
});

看注释部分,通过clients来指定/筛选 客户端

客户端的筛选,分组 去看一下client提供的方法。

IHubContext 滚去看

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董厂长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值