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