• 使用SignalR asp.net core通信 (二)使用分组


    使用分组指定条件发送消息

    服务端

    创建强类型SignalR
    IChatClient.cs

    /// <summary>
    /// 商户消息 强类型中心
    /// </summary>
    public interface IChatClient
    {
        /// <summary>
        /// 接收消息
        /// <para>客户端监听方法名为ReceiveStoreMessage</para>
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        Task ReceiveStoreMessage(MessageDto dto);
    }
    

    MessageDto.cs

    /// <summary>
    /// 消息
    /// </summary>
    public class MessageDto
    {
    
        public MessageDto()
        {
            CreateTime = DateTime.Now;
        }
    
        /// <summary>
        /// 消息标题
        /// </summary>
        public string Title { get; set; }
    
        public string Message { get; set; }
    
        public int Type { get; set; }
    
        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreateTime { get; set; }
    }
    

    现在修改ChatHub.cs文件

    public class ChatHub:Hub<IChatClient>
    {
        /// <summary>
        /// 重写 连接
        /// </summary>
        /// <returns></returns>
        public override async Task OnConnectedAsync()
        {
             var data = Context.GetHttpContext().Request.Query["token"];
                if (!string.IsNullOrEmpty(data))
                {
                    //这里根据获取到的token获取信息 根据指定的数据进行分组 例如租户id
                    var groupName = "group_1";
                    await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
                }
                await Task.CompletedTask;
        }
    }
    

    接口调用

    public class ChatController:ControllerBase
    {
    
        private readonly IHubContext<ChatHub,IChatClient> _chatHubContext;
        public ChatController(IHubContext<ChatHub,IChatClient> chatHubContext)
        {
            _chatHubContext = chatHubContext;
        }
        [Route("v1/SendMessage")]
        public async Task SendMessage()
        {
            var data = new MessageDto { Title="您收到一条验证消息",Message = "消息内容",Type = 1 };
            //这里可写获取需要发送分组的名称 
            var groupName = "group_1";
            await _chatHubContext.Clients.Group(groupName).ReceiveStoreMessage(data);
    
        }
    }
    

    客户端

    需要修改 signalR.js文件

    //引入安装的signalr包
    import * as signalR from '@aspnet/signalr'
    const signal = new signalR.HubConnectionBuilder()
        .withUrl('http://localhost:52970/chathub?token='+token)//服务器地址
        .build()
    export default {
        install: function(Vue) {
            Vue.prototype.signalr = signal
        }
    }
    

    消息接收

    this.signalr.on('ReceiveMessage',res=>{
        //可以写业务逻辑
        //res 返回的是后台传过来的数据 MessageDto.cs
        console.log(res);
    })
    

    文档资源

  • 相关阅读:
    CSS网站变灰
    长列表优化之滚动替换数据方案小记
    JS把数组中相同元素组合成一个新的数组问题
    yahoo CSS reset
    IE调试网页之三:使用 F12 工具控制台查看错误和状态 (Windows)
    KMP算法的JavaScript实现
    Android系统版本SDK_INT与版本对应关系
    利用jQuery的deferred异步按顺序加载JS文件
    Javascript图像处理之平滑处理
    IE调试网页之七:使用探查器工具分析代码性能 (Windows)
  • 原文地址:https://www.cnblogs.com/qs315/p/13323777.html
Copyright © 2020-2023  润新知