SignalR实时消息推送

    技术2022-07-11  93

    SignalR实时消息推送

    Signalr实时消息推送,这个功能我第一次接触呀,第一次写,像我这种技术,刚开始写的时候一脸懵,一点也看不懂!!!

    如何实现

    实现效果:当用户上传一个文件时候,推送消息给关注此用户的其他用户,告知此用户上传了一个新的文件(前提是必须双方同时在线)。

    推送原理:当前端用户打开网页时候,SignalR 服务端会自动生成一个guid类型的ConnectionId。此ConnectionId用来连接确定用户端,用来确定发送给哪个当前在线用户。当要推送消息时候,后端方法会根据这个ConnectionId来调动用户端的js方法,同时传递数据,利用用户端的js完成消息推送

    引用js文件 : <script src="~/Scripts/jquery-3.2.1.min.js"></script> <script src="~/Scripts/jquery.signalR-2.3.0.min.js"></script> <script src="~/signalr/hubs"></script> 后台在NuGet程序包中安装Microsoft.AspNet.SignalR ; 会自动生成一个startup.cs文件: using Microsoft.Owin; using Owin; [assembly: OwinStartup(typeof(Aipuer.FrameWork.Project.Web.App_Start.Startup))] namespace Aipuer.FrameWork.Project.Web.App_Start { public class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR(); } } }

    3 添加新建项,类型为: public class ServerHub : Hub;名称:ServerHub;在 ServerHub .cs中,继承Hub抽象类。

    public class ServerHub : Hub { private static Hashtable ht = new Hashtable(); /// <summary> /// 初次连接 /// </summary> /// <returns></returns> public void Adduser(string UserId) { string connectionId = Context.ConnectionId; if (ht[UserId] != null) ht[UserId] = connectionId; else ht.Add(UserId, connectionId); } public void AddGroup(string GroupId) { string connectionId = Context.ConnectionId; if (ht[GroupId] != null) ht[GroupId] = connectionId; else ht.Add(GroupId, connectionId); } public void CallALL() { string content = "您有新消息,请至消息中心查看!"; Clients.All.show(content); } public void CallGroup(string toName,string CUID,string toContent="") { try { string content = "您有新消息,请至消息中心查看!"; string[] names = toName.Split(','); string[] Content =toContent.Split(','); if (toContent != "") { content = "文件名为: " + Content[0] + " 的文件需要您执行 " + Content[1] + " 的处理!!"; } names = names.Distinct().ToArray(); if (names != null) { foreach (var item in names) { if (item != ""&&item!=CUID) { string connectionId = (string)ht[item]; if (connectionId != null && connectionId != "") { Clients.Client(connectionId).showLayer(content); } } } } } catch (Exception e) { throw; } } } 在前台使用 var chat = $.connection.serverHub; $.connection.hub.start().done(function () { chat.server.callGroup(Tid, "@ViewBag.UserId",title); }) //Tid为接收消息的人,“@ViewBag.UserId”为当前人,title为接收的消息内容

    基本上就是这些了。 好纠结呀,好难受呀,已经快做软件开发三个月了,但还是好想辞职,好想转行qwq~救救我吧!

    Processed: 0.010, SQL: 9