From bcbc0332da7b0fb38e699c839d43eb4c5b9df1f4 Mon Sep 17 00:00:00 2001 From: TK Date: Fri, 25 Jan 2019 17:51:40 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84udpSession=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JT808.DotNetty.Abstractions.csproj | 2 +- .../Configurations/JT808Configuration.cs | 2 - .../JT808.DotNetty.Core.csproj | 7 ++- .../Jobs/JT808UdpMaintainSessionJob.cs | 44 -------------- .../Session/JT808UdpSessionManager.cs | 57 ++++--------------- .../JT808.DotNetty.Tcp.csproj | 2 +- .../JT808.DotNetty.Udp.csproj | 3 +- .../JT808UdpDotnettyExtensions.cs | 3 - .../JT808.DotNetty.WebApi.csproj | 2 +- .../JT808.DotNetty.WebApiClientTool.csproj | 2 +- 10 files changed, 21 insertions(+), 103 deletions(-) delete mode 100644 src/JT808.DotNetty.Core/Jobs/JT808UdpMaintainSessionJob.cs diff --git a/src/JT808.DotNetty.Abstractions/JT808.DotNetty.Abstractions.csproj b/src/JT808.DotNetty.Abstractions/JT808.DotNetty.Abstractions.csproj index 559fd40..2283a90 100644 --- a/src/JT808.DotNetty.Abstractions/JT808.DotNetty.Abstractions.csproj +++ b/src/JT808.DotNetty.Abstractions/JT808.DotNetty.Abstractions.csproj @@ -14,7 +14,7 @@ https://github.com/SmallChi/JT808DotNetty https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE true - 1.0.2 + 1.0.3 diff --git a/src/JT808.DotNetty.Core/Configurations/JT808Configuration.cs b/src/JT808.DotNetty.Core/Configurations/JT808Configuration.cs index ff15407..48f1975 100644 --- a/src/JT808.DotNetty.Core/Configurations/JT808Configuration.cs +++ b/src/JT808.DotNetty.Core/Configurations/JT808Configuration.cs @@ -28,8 +28,6 @@ namespace JT808.DotNetty.Core.Configurations public int AllIdleTimeSeconds { get; set; } = 3600; - public int UdpSlidingExpirationTimeSeconds { get; set; } = 5*60; - /// /// WebApi服务 /// 默认828端口 diff --git a/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj b/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj index fb50efa..379d79e 100644 --- a/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj +++ b/src/JT808.DotNetty.Core/JT808.DotNetty.Core.csproj @@ -14,14 +14,17 @@ https://github.com/SmallChi/JT808DotNetty https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE true - 1.0.2 + 1.0.3 + + + + - diff --git a/src/JT808.DotNetty.Core/Jobs/JT808UdpMaintainSessionJob.cs b/src/JT808.DotNetty.Core/Jobs/JT808UdpMaintainSessionJob.cs deleted file mode 100644 index f513e2b..0000000 --- a/src/JT808.DotNetty.Core/Jobs/JT808UdpMaintainSessionJob.cs +++ /dev/null @@ -1,44 +0,0 @@ -using JT808.DotNetty.Core.Configurations; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - -namespace JT808.DotNetty.Core.Jobs -{ - public class JT808UdpMaintainSessionJob : JT808BackgroundService - { - private readonly ILogger _logger; - - private readonly JT808UdpSessionManager jT808UdpSessionManager; - private readonly IOptionsMonitor jT808ConfigurationAccessor; - - public JT808UdpMaintainSessionJob( - JT808UdpSessionManager jT808UdpSessionManager, - IOptionsMonitor jT808ConfigurationAccessor, - ILoggerFactory loggerFactory) - { - this.jT808UdpSessionManager = jT808UdpSessionManager; - this.jT808ConfigurationAccessor = jT808ConfigurationAccessor; - _logger = loggerFactory.CreateLogger(); - } - - public override string ServiceName => nameof(JT808UdpMaintainSessionJob); - - protected override async Task ExecuteAsync(CancellationToken stoppingToken) - { - _logger.LogInformation($"{ServiceName} is starting."); - stoppingToken.Register(() => _logger.LogInformation($"{ServiceName} background task is stopping.")); - while (!stoppingToken.IsCancellationRequested) - { - _logger.LogInformation($"{ServiceName} task doing background work."); - jT808UdpSessionManager.TimerToRemoveExpiredData(); - await Task.Delay(TimeSpan.FromSeconds(jT808ConfigurationAccessor.CurrentValue.UdpSlidingExpirationTimeSeconds), stoppingToken); - } - _logger.LogInformation($"{ServiceName} background task is stopping."); - } - } -} \ No newline at end of file diff --git a/src/JT808.DotNetty.Core/Session/JT808UdpSessionManager.cs b/src/JT808.DotNetty.Core/Session/JT808UdpSessionManager.cs index 547ea08..047d549 100644 --- a/src/JT808.DotNetty.Core/Session/JT808UdpSessionManager.cs +++ b/src/JT808.DotNetty.Core/Session/JT808UdpSessionManager.cs @@ -6,7 +6,6 @@ using System.Linq; using JT808.DotNetty.Abstractions; using JT808.DotNetty.Core.Metadata; using DotNetty.Transport.Channels; -using Microsoft.Extensions.Caching.Memory; using JT808.DotNetty.Core.Configurations; using Microsoft.Extensions.Options; @@ -21,17 +20,14 @@ namespace JT808.DotNetty.Core private readonly ILogger logger; private readonly IJT808SessionPublishing jT808SessionPublishing; - private readonly IMemoryCache memoryCache; private readonly IOptionsMonitor jT808ConfigurationAccessor; public JT808UdpSessionManager( IJT808SessionPublishing jT808SessionPublishing, - IMemoryCache memoryCache, IOptionsMonitor jT808ConfigurationAccessor, ILoggerFactory loggerFactory) { this.jT808SessionPublishing = jT808SessionPublishing; logger = loggerFactory.CreateLogger(); - this.memoryCache = memoryCache; this.jT808ConfigurationAccessor = jT808ConfigurationAccessor; } @@ -58,59 +54,28 @@ namespace JT808.DotNetty.Core return default; } } - /// - /// 定期去删除过期数据 - /// - public void TimerToRemoveExpiredData() { - foreach (var item in SessionIdDict) - { - memoryCache.Get(item.Key); - } - } public void TryAdd(JT808UdpSession appSession) { - memoryCache.GetOrCreate(appSession.TerminalPhoneNo, (cacheEntry) => - { - cacheEntry.SetSlidingExpiration(TimeSpan.FromSeconds(jT808ConfigurationAccessor.CurrentValue.UdpSlidingExpirationTimeSeconds)); - cacheEntry.RegisterPostEvictionCallback((key, value, reason, state) => - { - RemoveSession(key.ToString()); - }); - return true; - }); //1.先判断是否在缓存里面 if (SessionIdDict.TryGetValue(appSession.TerminalPhoneNo,out JT808UdpSession jT808UdpSession)) { - //处理缓存 - //判断设备的终结点是否相同 - if (jT808UdpSession.Sender.Equals(appSession.Sender)) - { - //相同 更新最后上线时间 - //每次使用最新的通道 - //将设备第一次上线时间赋值给当前上线的时间 - appSession.StartTime = jT808UdpSession.StartTime; - SessionIdDict.TryUpdate(appSession.TerminalPhoneNo, appSession, appSession); - } - else - { - //不同 算成新设备上来并且推送通知 - SessionIdDict.TryUpdate(appSession.TerminalPhoneNo, appSession, appSession); - jT808SessionPublishing.PublishAsync(JT808Constants.SessionOnline, appSession.TerminalPhoneNo); - } + SessionIdDict.TryUpdate(appSession.TerminalPhoneNo, appSession, appSession); } else { //添加缓存 - if (SessionIdDict.TryAdd(appSession.TerminalPhoneNo, appSession)) - { - //使用场景: - //部标的超长待机设备,不会像正常的设备一样一直连着,可能10几分钟连上了,然后发完就关闭连接, - //这时候想下发数据需要知道设备什么时候上线,在这边做通知最好不过了。 - //有设备关联上来可以进行通知 例如:使用Redis发布订阅 - jT808SessionPublishing.PublishAsync(JT808Constants.SessionOnline, appSession.TerminalPhoneNo); - } + //使用场景: + //部标的超长待机设备,不会像正常的设备一样一直连着,可能10几分钟连上了,然后发完就关闭连接, + //这时候想下发数据需要知道设备什么时候上线,在这边做通知最好不过了。 + //有设备关联上来可以进行通知 例如:使用Redis发布订阅 + SessionIdDict.TryAdd(appSession.TerminalPhoneNo, appSession); } + //移动是个大的内网,不跟随下发,根本就发不出来 + //移动很多卡,存储的那个socket地址端口,有效期非常短 + //不速度快点下发,那个socket地址端口就可能映射到别的对应卡去了 + //所以此处采用跟随设备消息下发指令 + jT808SessionPublishing.PublishAsync(JT808Constants.SessionOnline, appSession.TerminalPhoneNo); } public void Heartbeat(string terminalPhoneNo) diff --git a/src/JT808.DotNetty.Tcp/JT808.DotNetty.Tcp.csproj b/src/JT808.DotNetty.Tcp/JT808.DotNetty.Tcp.csproj index 9ea3f13..ba1861e 100644 --- a/src/JT808.DotNetty.Tcp/JT808.DotNetty.Tcp.csproj +++ b/src/JT808.DotNetty.Tcp/JT808.DotNetty.Tcp.csproj @@ -14,7 +14,7 @@ https://github.com/SmallChi/JT808DotNetty https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE true - 1.0.2 + 1.0.3 diff --git a/src/JT808.DotNetty.Udp/JT808.DotNetty.Udp.csproj b/src/JT808.DotNetty.Udp/JT808.DotNetty.Udp.csproj index d0fee8b..860cd1a 100644 --- a/src/JT808.DotNetty.Udp/JT808.DotNetty.Udp.csproj +++ b/src/JT808.DotNetty.Udp/JT808.DotNetty.Udp.csproj @@ -14,7 +14,7 @@ https://github.com/SmallChi/JT808DotNetty https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE true - 1.0.2 + 1.0.3 @@ -22,7 +22,6 @@ - diff --git a/src/JT808.DotNetty.Udp/JT808UdpDotnettyExtensions.cs b/src/JT808.DotNetty.Udp/JT808UdpDotnettyExtensions.cs index 5a747dd..6e21558 100644 --- a/src/JT808.DotNetty.Udp/JT808UdpDotnettyExtensions.cs +++ b/src/JT808.DotNetty.Udp/JT808UdpDotnettyExtensions.cs @@ -4,7 +4,6 @@ using JT808.DotNetty.Core.Handlers; using JT808.DotNetty.Core.Jobs; using JT808.DotNetty.Core.Services; using JT808.DotNetty.Udp.Handlers; -using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Internal; @@ -19,7 +18,6 @@ namespace JT808.DotNetty.Udp { public static IServiceCollection AddJT808UdpHost(this IServiceCollection serviceDescriptors) { - serviceDescriptors.TryAddSingleton< IMemoryCache, MemoryCache>(); serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); serviceDescriptors.TryAddSingleton(); @@ -28,7 +26,6 @@ namespace JT808.DotNetty.Udp serviceDescriptors.TryAddScoped(); serviceDescriptors.AddHostedService(); serviceDescriptors.AddHostedService(); - serviceDescriptors.AddHostedService(); serviceDescriptors.AddHostedService(); return serviceDescriptors; } diff --git a/src/JT808.DotNetty.WebApi/JT808.DotNetty.WebApi.csproj b/src/JT808.DotNetty.WebApi/JT808.DotNetty.WebApi.csproj index f354cdf..332036c 100644 --- a/src/JT808.DotNetty.WebApi/JT808.DotNetty.WebApi.csproj +++ b/src/JT808.DotNetty.WebApi/JT808.DotNetty.WebApi.csproj @@ -14,7 +14,7 @@ https://github.com/SmallChi/JT808DotNetty https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE true - 1.0.2 + 1.0.3 diff --git a/src/JT808.DotNetty.WebApiClientTool/JT808.DotNetty.WebApiClientTool.csproj b/src/JT808.DotNetty.WebApiClientTool/JT808.DotNetty.WebApiClientTool.csproj index f5f9e7c..b9769e1 100644 --- a/src/JT808.DotNetty.WebApiClientTool/JT808.DotNetty.WebApiClientTool.csproj +++ b/src/JT808.DotNetty.WebApiClientTool/JT808.DotNetty.WebApiClientTool.csproj @@ -14,7 +14,7 @@ https://github.com/SmallChi/JT808DotNetty https://github.com/SmallChi/JT808DotNetty/blob/master/LICENSE true - 1.0.2 + 1.0.3