做爰高潮a片〈毛片〉,尤物av天堂一区二区在线观看,一本久久A久久精品VR综合,添女人荫蒂全部过程av

最新文章專題視頻專題問答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
主站蜘蛛池模板: 两当县| 承德县| 新安县| 扬中市| 读书| 嘉善县| 阿瓦提县| 瑞昌市| 安顺市| 小金县| 政和县| 新郑市| 凤阳县| 崇义县| 普兰店市| 庆安县| 遂川县| 新蔡县| 梁山县| 乳山市| 收藏| 应城市| 绥阳县| 澜沧| 大邑县| 鸡西市| 平乡县| 尉犁县| 合川市| 额尔古纳市| 长岛县| 宜宾县| 樟树市| 全州县| 富川| 石屏县| 郴州市| 历史| 温州市| 青田县| 读书|