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各打開一個客戶端頁面,然后谷歌點發送 兩邊都能收到推送 測試成功 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM