<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        asp.net core 2.0 webapi集成signalr(實例講解)

        來源:懂視網 責編:小采 時間:2020-11-27 22:35:12
        文檔

        asp.net core 2.0 webapi集成signalr(實例講解)

        asp.net core 2.0 webapi集成signalr(實例講解):在博客園也很多年了,一直未曾分享過什么東西,也沒有寫過博客,但自己也是汲取著博客園的知識成長的; 這兩天想著不能這么無私,最近.NET CORE貌似挺流行的,閑來無事也自己搞了個asp.net core signalr 博客園里面也有人在.net core 2.0下面集成
        推薦度:
        導讀asp.net core 2.0 webapi集成signalr(實例講解):在博客園也很多年了,一直未曾分享過什么東西,也沒有寫過博客,但自己也是汲取著博客園的知識成長的; 這兩天想著不能這么無私,最近.NET CORE貌似挺流行的,閑來無事也自己搞了個asp.net core signalr 博客園里面也有人在.net core 2.0下面集成

        在博客園也很多年了,一直未曾分享過什么東西,也沒有寫過博客,但自己也是汲取著博客園的知識成長的;

        這兩天想著不能這么無私,最近.NET CORE貌似挺流行的,閑來無事也自己搞了個asp.net core signalr

        博客園里面也有人在.net core 2.0下面集成了signalr,但是是集成在同一個項目里面的,但是大家都知道我們很多的項目都是分離的;

        而且signalr涉及到連接數和內存資源的占用問題,如果都集成在一個項目里面當訪問量多大的時候容易造成網站訪問緩慢,具體原因就不多說了

        所以我這里做了一個在.net core webapi里面集成signalr,我們就可以通過調用webapi來實現服務器向客戶端推送消息

        第一步引用nuget:Mrcrosoft.AspNetCore.SignalR

        第二步添加配置代碼:

        首先ConfigureServices里面添加如下代碼:

        public void ConfigureServices(IServiceCollection services)
         {
         services.AddSignalR();
         services.AddCors(options =>
         {
         options.AddPolicy("SignalrCore",
         policy => policy.AllowAnyOrigin()
         .AllowAnyHeader()
         .AllowAnyMethod());
         });
         services.AddSingleton<IServiceProvider, ServiceProvider>();
         }

        然后Configure里面添加

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
         {
         if (env.IsDevelopment())
         {
         app.UseDeveloperExceptionPage();
         }
         //跨域支持
         app.UseCors("SignalrCore");
         app.UseSignalR(routes =>
         {
         routes.MapHub<SignalrHubs>("signalrHubs");
         });
         app.UseWebSockets();
        
         app.UseMvc();
         }

        然后我們添加一個hubs

        public class SignalrHubs:Hub
         {
         /// <summary>
         /// 創建signalr鏈接
         /// </summary>
         /// <param name="parentId">pid(作為用戶組)</param>
         /// <param name="shopId">sid</param>
         public Task InitUser(string parentId, string shopId)
         {
         Groups.AddAsync(Context.ConnectionId, parentId);
         SignalrGroups.UserGroups.Add(new SignalrGroups()
         {
         ConnectionId = Context.ConnectionId,
         GroupName = parentId,
         ShopId = shopId
         });
         return Clients.All.InvokeAsync("NoticeOnline", "用戶組數據更新完成,新增id為:" + Context.ConnectionId + " pid:" + parentId + " sid:" + shopId + "");
         }
        
         public override Task OnDisconnectedAsync(Exception exception)
         {
         //掉線移除用戶
         var user = SignalrGroups.UserGroups.FirstOrDefault(c => c.ConnectionId == Context.ConnectionId);
         if (user != null)
         {
         SignalrGroups.UserGroups.Remove(user);
         Groups.RemoveAsync(Context.ConnectionId, user.GroupName);
         }
         return base.OnDisconnectedAsync(exception);
         }
         }

        PS:我這里是根據本人業務需要來做的,大家可以修改成其他的(用戶量大的時候內存占用肯定高,這里只做一個簡單的例子)

        以上基本的環境搭建就已經完成了

        接下來控制器里面的代碼

        [Produces("application/json")]
         [Route("api/MRSoftPush")]
         public class MRSoftPushController : Controller
         {
         private IHubContext<SignalrHubs> hubContext;
         public MRSoftPushController(IServiceProvider service)
         {
         hubContext = service.GetService<IHubContext<SignalrHubs>>();
         }
        
         [HttpGet]
         public string Get()
         {
         return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff");
         }
        
         /// <summary>
         /// 單個connectionid推送
         /// </summary>
         /// <param name="groups"></param>
         /// <returns></returns>
         [HttpPost,Route("AnyOne")]
         public IActionResult AnyOne([FromBody]IEnumerable<SignalrGroups> groups)
         {
         if (groups != null && groups.Any())
         {
         var ids = groups.Select(c=>c.ShopId);
         var list = SignalrGroups.UserGroups.Where(c=>ids.Contains(c.ShopId));
         foreach (var item in list)
         hubContext.Clients.Client(item.ConnectionId).InvokeAsync("AnyOne", $"{item.ConnectionId}: {item.Content}");
         }
         return Ok();
         }
        
         /// <summary>
         /// 全部推送
         /// </summary>
         /// <param name="message"></param>
         /// <returns></returns>
         [HttpGet,Route("EveryOne")]
         public IActionResult EveryOne(string message)
         {
         hubContext.Clients.All.InvokeAsync("EveryOne", $"{message}");
         return Ok();
         }
        
         /// <summary>
         /// 組推送
         /// </summary>
         /// <param name="group"></param>
         /// <returns></returns>
         [HttpPost,Route("AnyGroups")]
         public IActionResult AnyGroups([FromBody]SignalrGroups group)
         {
         if (group != null)
         {
         hubContext.Clients.Group(group.GroupName).InvokeAsync("AnyGroups", $"{group.Content}");
         }
         return Ok();
         }
        
         /// <summary>
         /// 多參數接收方式
         /// </summary>
         /// <param name="message"></param>
         /// <returns></returns>
         [HttpGet,Route("MoreParamsRequest")]
         public IActionResult MoreParamsRequest(string message)
         {
         hubContext.Clients.All.InvokeAsync("MoreParamsRequest", message, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff"));
         return Ok();
         }
         }

        服務器端的代碼到這里全部完成,接下來咱們看客戶端的代碼

        我的客戶端代碼是在另外一個項目里面,和服務器端是分離的

        <input type="text" id="ParentId" placeholder="ParentId" />
        <br />
        <input type="text" id="ShopId" placeholder="ShopId" />
        <br />
        <button id="fuckyou">用戶上線</button>
        <br />
        <br />
        <br />
        
        <ul id="message" ></ul>
        
        @section scripts {
         <script>
         $(function () {
        
         let hubUrl = 'http://192.168.0.149:8009/signalrHubs';
         let httpConnection = new signalR.HttpConnection(hubUrl);
         let hubConnection = new signalR.HubConnection(httpConnection);
         $("#fuckyou").click(function () {
         hubConnection.invoke('InitUser', $("#ParentId").val(), $("#ShopId").val());
         });
         hubConnection.on('NoticeOnline', data => {
         $("#message").append("<li>" + data + "</li>");
         });
         hubConnection.on('EveryOne', data => {
         $("#message").append("<li style=\"color:red;\">全部推送:" + data + "</li>");
         });
         hubConnection.on('AnyGroups', data => {
         $("#message").append("<li style=\"color:black;\">單個用戶組推送:" + data + "</li>");
         });
         hubConnection.on('AnyOne', data => {
         $("#message").append("<li style=\"color:blue;\">單個ID推送:" + data + "</li>");
         });
         hubConnection.on('MoreParamsRequest', (message, date) => {
         $("#message").append("<li style=\"color:green;\">多參數接收:" + message + " : " + data + "</li>");
         });
         hubConnection.start();
        
         });
         </script>
        }

        頁面上引用連個js

        <script src="https://www.gxlcms.com/js/signalr-client.min.js"></script>
        <script src="https://www.gxlcms.com/js/jquery.min.js"></script>

        到這里基本就已經完成了,下面看一下運行效果

        第一次寫博客,有點緊張,代碼寫得比較倉促,很多細節都沒有優化,有很多不足之處,望各位多多指正

        以上這篇asp.net core 2.0 webapi集成signalr(實例講解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        asp.net core 2.0 webapi集成signalr(實例講解)

        asp.net core 2.0 webapi集成signalr(實例講解):在博客園也很多年了,一直未曾分享過什么東西,也沒有寫過博客,但自己也是汲取著博客園的知識成長的; 這兩天想著不能這么無私,最近.NET CORE貌似挺流行的,閑來無事也自己搞了個asp.net core signalr 博客園里面也有人在.net core 2.0下面集成
        推薦度:
        標簽: 2.0 實例 net
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产免费av片在线无码免费看| 精品无码无人网站免费视频| 国产yw855.c免费视频| 亚洲自国产拍揄拍| 免费av欧美国产在钱| 18女人腿打开无遮掩免费| 亚洲高清在线视频| 亚洲精品在线免费观看| 亚洲国产中文在线视频| 一二三四免费观看在线视频中文版| 亚洲导航深夜福利| 四虎在线免费播放| 黄色a级免费网站| 久久亚洲2019中文字幕| 亚洲色无码专区一区| 在线观看免费亚洲| xxxxx做受大片视频免费| 亚洲va中文字幕无码久久| 91精品国产免费入口| 亚洲人成小说网站色| 免费观看亚洲人成网站| 羞羞视频免费网站在线看| 亚洲av日韩av无码| 无码一区二区三区AV免费| 青青免费在线视频| 久久亚洲精品中文字幕无码| 成人免费午夜无码视频| 污视频网站在线观看免费| 亚洲精品无码久久久久| av免费不卡国产观看| 国产精品亚洲专区无码不卡| 亚洲A∨无码一区二区三区| 成年人免费的视频| 黄色三级三级三级免费看| 亚洲天天做日日做天天看| 午夜爱爱免费视频| 在线观看片免费人成视频播放| 亚洲一区二区三区深夜天堂| 亚洲精品成a人在线观看| 2021免费日韩视频网| 国产免费伦精品一区二区三区|