• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
    當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

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

    來源:懂視網(wǎng) 責(zé)編:小采 時間: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下面集成
    推薦度:
    導(dǎo)讀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涉及到連接數(shù)和內(nèi)存資源的占用問題,如果都集成在一個項目里面當(dāng)訪問量多大的時候容易造成網(wǎng)站訪問緩慢,具體原因就不多說了

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

    第一步引用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>
     /// 創(chuàng)建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", "用戶組數(shù)據(jù)更新完成,新增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:我這里是根據(jù)本人業(yè)務(wù)需要來做的,大家可以修改成其他的(用戶量大的時候內(nèi)存占用肯定高,這里只做一個簡單的例子)

    以上基本的環(huán)境搭建就已經(jīng)完成了

    接下來控制器里面的代碼

    [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>
     /// 多參數(shù)接收方式
     /// </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();
     }
     }

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

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

    <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;\">多參數(shù)接收:" + 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>

    到這里基本就已經(jīng)完成了,下面看一下運(yùn)行效果

    第一次寫博客,有點緊張,代碼寫得比較倉促,很多細(xì)節(jié)都沒有優(yōu)化,有很多不足之處,望各位多多指正

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

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。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下面集成
    推薦度:
    標(biāo)簽: 2.0 實例 net
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 无码人妻精品一区二区三18禁| 国产精品一区二区久久不卡| 久久这里只有精品18| 国产精品亚洲高清一区二区| 精品国产a∨无码一区二区三区 | 国产99re在线观看只有精品| 亚洲精品无码久久久久AV麻豆| 国产综合免费精品久久久| 久久最新精品国产| 91精品国产乱码久久久久久 | 国产精品亚洲а∨无码播放| 中文字幕无码精品亚洲资源网久久 | 青青青青久久精品国产h久久精品五福影院1421 | 久久精品国产亚洲AV无码偷窥| 亚洲精品岛国片在线观看| 国産精品久久久久久久| 92国产精品午夜福利免费| 秋霞午夜鲁丝片午夜精品久| 国产精品久久久久久久久| 国产精品免费福利久久| 久久久久久亚洲精品成人| 亚洲国产精品无码专区影院 | 免费看污污的网站欧美国产精品不卡在线观看| 四虎成人欧美精品在永久在线| 99久久婷婷免费国产综合精品| 精品久久久久久无码中文字幕一区| 亚洲国产精品嫩草影院在线观看| 亚洲高清国产拍精品青青草原| 欧美精品一区二区三区免费观看| 久久99精品久久久久久噜噜| 国产在线精品一区二区三区不卡| 精品欧美一区二区在线观看| 国产内地精品毛片视频| 国产高清在线精品一本大道| 成人国产精品一区二区视频| 国产亚洲精品拍拍拍拍拍| 国产三级精品三级| 拍国产真实乱人偷精品| 亚洲日韩精品一区二区三区| 久久久久成人精品无码中文字幕 | 国产精品五月天强力打造|