<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
        主站蜘蛛池模板: a级毛片在线免费观看| 亚洲AV电影天堂男人的天堂| 好吊色永久免费视频大全| 无码国产亚洲日韩国精品视频一区二区三区 | 国产91免费在线观看| 久久久久亚洲av无码专区喷水 | 国产综合成人亚洲区| 在线免费观看一级片| 亚洲精品第一综合99久久| 久久不见久久见免费影院| 亚洲男人天堂2022| 全免费A级毛片免费看网站| 亚洲日韩精品国产一区二区三区 | 欧美男同gv免费网站观看| 亚洲av日韩av综合| 女人18毛片a级毛片免费 | a国产成人免费视频| 亚洲国产精品自在线一区二区| 99精品在线免费观看| 亚洲校园春色另类激情| 免费无码成人AV片在线在线播放| 亚洲av成人无码网站…| 久久久久久A亚洲欧洲AV冫| 日韩电影免费在线观看网站| 亚洲人成电影在线天堂| 天天操夜夜操免费视频| 有色视频在线观看免费高清在线直播 | 亚洲人成免费电影| 国产午夜免费秋霞影院| 中文字幕免费在线视频| 亚洲av永久无码精品三区在线4 | 中文字幕无线码中文字幕免费| 亚洲成人激情在线| 大学生高清一级毛片免费| 你是我的城池营垒免费看| 亚洲日本va在线观看| 亚洲无码视频在线| 日韩版码免费福利视频| 两性色午夜视频免费网| 亚洲国产午夜精品理论片在线播放| 久久久亚洲精品蜜桃臀|