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各打开一个客户端页面,然后谷歌点发送 两边都能收到推送 测试成功