Abp下使用SignalR作为消息推送

服务端

1.安装

打开nuget 安装 Abp.Web.SignalR 完成(一般来说abp框架已经自动添加了 不需要手动添加)

2.startUp里面添加 app.MapSignalR();(一般来说abp框架已经自动添加了 不需要手动添加);

3.创建线集器Hub类:TestHub(暴露给前端的方法名要小写开头;暴露给前端的方法名要小写开头;暴露给前端的方法名要小写开头

    [HubName("testHub")]
    public class TestHub : Hub, ITransientDependency
    {
        public TestHub()
        {

        }
        //当连接hub实例时被调用
        public override Task OnConnected()
        {
            string connId = Context.ConnectionId;

            return base.OnConnected();

        }

        //当失去连接或链接超时时被调用
        public override Task OnDisconnected(bool stopCalled)
        {
            //stopCalled=true时,客户端关闭连接
            //stopCalled=false时,出现链接超时
            return base.OnDisconnected(stopCalled);
        }

        //重新连接时被调用
        public override Task OnReconnected()
        {
            return base.OnReconnected();
        }
        /// <summary>
        /// 推送到当前客户端
        /// </summary>
        /// <param name="msg"></param>
        public void call(string msg)
        {
            Clients.Client(Context.ConnectionId).receive(msg);//receive对应客户端接收方法名字 myhub.client.receive
        }
        /// <summary>
        /// 推送到所有客户端
        /// </summary>
        /// <param name="msg"></param>
        public void sentAllMsg(string msg)
        {
            if (msg == "nmsl")
                msg = "nmsl wsnd";
            Clients.All.receive(msg);//receive对应客户端接收方法名字 myhub.client.receive 
        }
    }

 

  客户端:

  1.添加 abp.signalr.js(看页面报错,缺啥加啥,没报错就不用管了)

<script src="https://cdn.bootcss.com/signalr.js/2.4.0/jquery.signalR.js"></script>
<script src="~/signalr/hubs"></script>
<script src="~/Abp/Framework/scripts/libs/abp.signalr.js"></script>

 2.定义客户端方法receive(用于接受服务器信息,方法名跟参数要跟服务器Call方法跟SentAllMsg方法里面的receive对应)

myhub.client.receive = function (msg) {
        alert(msg);
    }//定义接收方法

 3.定义访问服务器方法的方法(这里只测试sentAllMsg方法)

 function sentMsg(msg) {
        myhub.server.sentAllMsg(msg); //sentAllMsg对应服务端接收方法名字sentAllMsg
    }

  测试:(这里只测试sentAllMsg方法)

 

<input placeholder="plz input sent content,fuck you" id="content" /><button onclick="clickMethod()">sent</button>

  

function clickMethod() {
        var msg = $("#content").val();
        sentMsg(msg);
    }

  测试效果图:

 

谷歌浏览器跟2345各打开一个客户端页面,然后谷歌点发送 两边都能收到推送 测试成功 

posted on 2019-03-20 18:17  kenzo  阅读(2263)  评论(0编辑  收藏  举报

导航