新增signalR连接

This commit is contained in:
不做码农
2022-02-27 21:11:46 +08:00
parent 2a84f7d322
commit 748b9065db
15 changed files with 259 additions and 61 deletions

View File

@@ -0,0 +1,62 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Infrastructure.Model;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;
using ZR.Admin.WebApi.Filters;
using ZR.Model;
namespace ZR.Admin.WebApi.Hubs
{
[Verify]
public class MessageHub : Hub
{
//创建用户集合,用于存储所有链接的用户数据
private static readonly List<OnlineUsers> clientUsers = new();
#region
/// <summary>
/// 客户端连接的时候调用
/// </summary>
/// <returns></returns>
public override Task OnConnectedAsync()
{
//name 获取不到有待研究
var name = Context.User.Identity.Name;
var user = clientUsers.Any(u => u.ConnnectionId == Context.ConnectionId);
//判断用户是否存在,否则添加集合
if (!user)
{
clientUsers.Add(new OnlineUsers(Context.ConnectionId, Context.User.Identity.Name));
Console.WriteLine($"{DateTime.Now}{Context.User.Identity.Name},{Context.ConnectionId}连接服务端success当前已连接{clientUsers.Count}个");
}
Clients.All.SendAsync("onlineNum", clientUsers.Count);
return base.OnConnectedAsync();
}
/// <summary>
/// 连接终止时调用。
/// </summary>
/// <returns></returns>
public override Task OnDisconnectedAsync(Exception exception)
{
var user = clientUsers.Where(p => p.ConnnectionId == Context.ConnectionId).FirstOrDefault();
//判断用户是否存在,否则添加集合
if (user != null)
{
Console.WriteLine($"用户{user?.Name}离开了,当前已连接{clientUsers.Count}个");
clientUsers.Remove(user);
Clients.All.SendAsync("onlineNum", clientUsers.Count);
}
return base.OnDisconnectedAsync(exception);
}
#endregion
}
}

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace ZR.Model
{
public class OnlineUsers
{
/// <summary>
/// 客户端连接Id
/// </summary>
public string ConnnectionId { get; set; }
/// <summary>
/// 用户id
/// </summary>
public int Userid { get; set; }
public string Name { get; set; }
public DateTime LoginTime { get; set; }
public OnlineUsers(string clientid, string name)
{
ConnnectionId = clientid;
Name = name;
LoginTime = DateTime.Now;
}
}
}

View File

@@ -15,8 +15,8 @@ using System.Threading.Tasks;
using ZR.Admin.WebApi.Extensions;
using ZR.Admin.WebApi.Filters;
using ZR.Admin.WebApi.Framework;
using ZR.Admin.WebApi.Hubs;
using ZR.Admin.WebApi.Middleware;
using ZR.Common.Cache;
namespace ZR.Admin.WebApi
{
@@ -43,6 +43,14 @@ namespace ZR.Admin.WebApi
.AllowAnyMethod();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B7BD>
});
});
//ע<><D7A2>SignalRʵʱͨѶ<CDA8><D1B6>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>json<6F><6E><EFBFBD><EFBFBD>
services.AddSignalR(options =>
{
//<2F>ͻ<EFBFBD><CDBB>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󵽷<EFBFBD><F3B5BDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB3A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>30<33><EFBFBD>ij<EFBFBD>4<EFBFBD><34><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>connection.keepAliveIntervalInMilliseconds = 12e4;<3B><>2<EFBFBD><32><EFBFBD><EFBFBD>
//options.ClientTimeoutInterval = TimeSpan.FromMinutes(4);
//<2F><><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󵽿ͻ<F3B5BDBF><CDBB>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>15<31><EFBFBD>ij<EFBFBD>2<EFBFBD><32><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>connection.serverTimeoutInMilliseconds = 24e4;<3B><>4<EFBFBD><34><EFBFBD><EFBFBD>
//options.KeepAliveInterval = TimeSpan.FromMinutes(2);
});
//<2F><><EFBFBD><EFBFBD>Error unprotecting the session cookie<69><65><EFBFBD><EFBFBD>
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "DataProtection"));
@@ -96,7 +104,7 @@ namespace ZR.Admin.WebApi
});
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>̬<EFBFBD>ļ<EFBFBD>/wwwrootĿ¼<C4BF>ļ<EFBFBD><C4BC><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>UseRoutingǰ<67><C7B0>
app.UseStaticFiles();
//<2F><><EFBFBD><EFBFBD>·<EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD>
app.UseRouting();
app.UseCors("Policy");//Ҫ<><D2AA><EFBFBD><EFBFBD>app.UseEndpointsǰ<73><C7B0>
@@ -107,12 +115,13 @@ namespace ZR.Admin.WebApi
app.UseAuthentication();
//2.<2E>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD><EFBFBD>Ȩ
app.UseAuthorization();
//<2F><><EFBFBD><EFBFBD>session
app.UseSession();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
app.UseResponseCaching();
// <20>ָ<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>ָ<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
app.UseAddTaskSchedulers();
//ʹ<><CAB9>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>
app.UseMiddleware<GlobalExceptionMiddleware>();
app.UseEndpoints(endpoints =>
@@ -120,6 +129,9 @@ namespace ZR.Admin.WebApi
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
//<2F><><EFBFBD><EFBFBD>socket<65><74><EFBFBD><EFBFBD>
endpoints.MapHub<MessageHub>("/msgHub");
});
}