优化网络质量计算公式,减小衰减系数,随着延迟增加,放缓积分下降速度。1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%

This commit is contained in:
智能大石头 2025-07-22 14:31:39 +08:00
parent f48c3b7233
commit a9e1020c4a
14 changed files with 49 additions and 74 deletions

View File

@ -20,7 +20,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NewLife.XCode" Version="11.19.2025.701" />
<PackageReference Include="NewLife.XCode" Version="11.19.2025.717-beta0003" />
</ItemGroup>
<ItemGroup>

View File

@ -18,7 +18,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NewLife.Core" Version="11.5.2025.713-beta1307" />
<PackageReference Include="NewLife.Core" Version="11.5.2025.717-beta0001" />
</ItemGroup>
</Project>

View File

@ -18,7 +18,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NewLife.Core" Version="11.5.2025.713-beta1307" />
<PackageReference Include="NewLife.Core" Version="11.5.2025.717-beta0001" />
</ItemGroup>
</Project>

View File

@ -156,8 +156,8 @@
<Column Name="Signal" DataType="Int32" Description="信号。信号强度WiFi/4G" />
<Column Name="UplinkSpeed" DataType="Int64" ItemType="GMK" Description="上行速度。网络发送速度,字节每秒" />
<Column Name="DownlinkSpeed" DataType="Int64" ItemType="GMK" Description="下行速度。网络接收速度,字节每秒" />
<Column Name="IntranetScore" DataType="Double" ItemType="percent" Description="内网质量。综合评估到网关的心跳延迟和丢包率满分1分" />
<Column Name="InternetScore" DataType="Double" ItemType="percent" Description="外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率满分1分" />
<Column Name="IntranetScore" DataType="Double" ItemType="percent" Description="内网质量。评估到网关的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%" />
<Column Name="InternetScore" DataType="Double" ItemType="percent" Description="外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%" />
<Column Name="ProcessCount" DataType="Int32" Description="进程数" />
<Column Name="TcpConnections" DataType="Int32" Description="连接数。传输数据Established的Tcp网络连接数" />
<Column Name="TcpTimeWait" DataType="Int32" Description="主动关闭。主动关闭后TimeWait的Tcp网络连接数下一步Closed" />
@ -223,8 +223,8 @@
<Column Name="TcpConnections" DataType="Int32" Description="连接数。传输数据Established的Tcp网络连接数" />
<Column Name="TcpTimeWait" DataType="Int32" Description="主动关闭。主动关闭后TimeWait的Tcp网络连接数等待2MSL确保四次挥手的最后一个ACK能够发出下一步Closed" />
<Column Name="TcpCloseWait" DataType="Int32" Description="被动关闭。作为客户端收到服务器FIN后进入CloseWait的Tcp网络连接数还没发送自己的FIN主要原因是我方太忙" />
<Column Name="IntranetScore" DataType="Double" ItemType="percent" Description="内网质量。综合评估到网关的心跳延迟和丢包率满分1分" />
<Column Name="InternetScore" DataType="Double" ItemType="percent" Description="外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率满分1分" />
<Column Name="IntranetScore" DataType="Double" ItemType="percent" Description="内网质量。评估到网关的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%" />
<Column Name="InternetScore" DataType="Double" ItemType="percent" Description="外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%" />
<Column Name="Delay" DataType="Int32" Description="延迟。网络延迟客户端最近一次心跳耗时的一半单位ms" />
<Column Name="Offset" DataType="Int32" Description="偏移。客户端UTC时间加上一半延迟再减服务端UTC时间单位ms" />
<Column Name="LocalTime" DataType="DateTime" Description="本地时间" />

View File

@ -1163,7 +1163,7 @@
<td></td>
<td></td>
<td>N</td>
<td>综合评估到网关的心跳延迟和丢包率满分1分</td>
<td>评估到网关的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</td>
</tr>
<tr>
@ -1174,7 +1174,7 @@
<td></td>
<td></td>
<td>N</td>
<td>综合评估到DNS和星尘服务器的心跳延迟和丢包率满分1分</td>
<td>综合评估到DNS和星尘服务器的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</td>
</tr>
<tr>
@ -1736,7 +1736,7 @@
<td></td>
<td></td>
<td>N</td>
<td>综合评估到网关的心跳延迟和丢包率满分1分</td>
<td>评估到网关的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</td>
</tr>
<tr>
@ -1747,7 +1747,7 @@
<td></td>
<td></td>
<td>N</td>
<td>综合评估到DNS和星尘服务器的心跳延迟和丢包率满分1分</td>
<td>综合评估到DNS和星尘服务器的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</td>
</tr>
<tr>

View File

@ -276,19 +276,19 @@ public partial class NodeOnline
public Int64 DownlinkSpeed { get => _DownlinkSpeed; set { if (OnPropertyChanging("DownlinkSpeed", value)) { _DownlinkSpeed = value; OnPropertyChanged("DownlinkSpeed"); } } }
private Double _IntranetScore;
/// <summary>内网质量。综合评估到网关的心跳延迟和丢包率满分1分</summary>
/// <summary>内网质量。评估到网关的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</summary>
[DisplayName("内网质量")]
[Description("内网质量。综合评估到网关的心跳延迟和丢包率满分1分")]
[Description("内网质量。评估到网关的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%")]
[DataObjectField(false, false, false, 0)]
[BindColumn("IntranetScore", "内网质量。综合评估到网关的心跳延迟和丢包率满分1分", "", ItemType = "percent")]
[BindColumn("IntranetScore", "内网质量。评估到网关的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%", "", ItemType = "percent")]
public Double IntranetScore { get => _IntranetScore; set { if (OnPropertyChanging("IntranetScore", value)) { _IntranetScore = value; OnPropertyChanged("IntranetScore"); } } }
private Double _InternetScore;
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率满分1分</summary>
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</summary>
[DisplayName("外网质量")]
[Description("外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率满分1分")]
[Description("外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%")]
[DataObjectField(false, false, false, 0)]
[BindColumn("InternetScore", "外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率满分1分", "", ItemType = "percent")]
[BindColumn("InternetScore", "外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%", "", ItemType = "percent")]
public Double InternetScore { get => _InternetScore; set { if (OnPropertyChanging("InternetScore", value)) { _InternetScore = value; OnPropertyChanged("InternetScore"); } } }
private Int32 _ProcessCount;
@ -694,10 +694,10 @@ public partial class NodeOnline
/// <summary>下行速度。网络接收速度,字节每秒</summary>
public static readonly Field DownlinkSpeed = FindByName("DownlinkSpeed");
/// <summary>内网质量。综合评估到网关的心跳延迟和丢包率满分1分</summary>
/// <summary>内网质量。评估到网关的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</summary>
public static readonly Field IntranetScore = FindByName("IntranetScore");
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率满分1分</summary>
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</summary>
public static readonly Field InternetScore = FindByName("InternetScore");
/// <summary>进程数</summary>
@ -853,10 +853,10 @@ public partial class NodeOnline
/// <summary>下行速度。网络接收速度,字节每秒</summary>
public const String DownlinkSpeed = "DownlinkSpeed";
/// <summary>内网质量。综合评估到网关的心跳延迟和丢包率满分1分</summary>
/// <summary>内网质量。评估到网关的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</summary>
public const String IntranetScore = "IntranetScore";
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率满分1分</summary>
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</summary>
public const String InternetScore = "InternetScore";
/// <summary>进程数</summary>

View File

@ -143,19 +143,19 @@ public partial class NodeData
public Int32 TcpCloseWait { get => _TcpCloseWait; set { if (OnPropertyChanging("TcpCloseWait", value)) { _TcpCloseWait = value; OnPropertyChanged("TcpCloseWait"); } } }
private Double _IntranetScore;
/// <summary>内网质量。综合评估到网关的心跳延迟和丢包率满分1分</summary>
/// <summary>内网质量。评估到网关的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</summary>
[DisplayName("内网质量")]
[Description("内网质量。综合评估到网关的心跳延迟和丢包率满分1分")]
[Description("内网质量。评估到网关的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%")]
[DataObjectField(false, false, false, 0)]
[BindColumn("IntranetScore", "内网质量。综合评估到网关的心跳延迟和丢包率满分1分", "", ItemType = "percent")]
[BindColumn("IntranetScore", "内网质量。评估到网关的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%", "", ItemType = "percent")]
public Double IntranetScore { get => _IntranetScore; set { if (OnPropertyChanging("IntranetScore", value)) { _IntranetScore = value; OnPropertyChanged("IntranetScore"); } } }
private Double _InternetScore;
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率满分1分</summary>
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</summary>
[DisplayName("外网质量")]
[Description("外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率满分1分")]
[Description("外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%")]
[DataObjectField(false, false, false, 0)]
[BindColumn("InternetScore", "外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率满分1分", "", ItemType = "percent")]
[BindColumn("InternetScore", "外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%", "", ItemType = "percent")]
public Double InternetScore { get => _InternetScore; set { if (OnPropertyChanging("InternetScore", value)) { _InternetScore = value; OnPropertyChanged("InternetScore"); } } }
private Int32 _Delay;
@ -361,10 +361,10 @@ public partial class NodeData
/// <summary>被动关闭。作为客户端收到服务器FIN后进入CloseWait的Tcp网络连接数还没发送自己的FIN主要原因是我方太忙</summary>
public static readonly Field TcpCloseWait = FindByName("TcpCloseWait");
/// <summary>内网质量。综合评估到网关的心跳延迟和丢包率满分1分</summary>
/// <summary>内网质量。评估到网关的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</summary>
public static readonly Field IntranetScore = FindByName("IntranetScore");
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率满分1分</summary>
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</summary>
public static readonly Field InternetScore = FindByName("InternetScore");
/// <summary>延迟。网络延迟客户端最近一次心跳耗时的一半单位ms</summary>
@ -439,10 +439,10 @@ public partial class NodeData
/// <summary>被动关闭。作为客户端收到服务器FIN后进入CloseWait的Tcp网络连接数还没发送自己的FIN主要原因是我方太忙</summary>
public const String TcpCloseWait = "TcpCloseWait";
/// <summary>内网质量。综合评估到网关的心跳延迟和丢包率满分1分</summary>
/// <summary>内网质量。评估到网关的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</summary>
public const String IntranetScore = "IntranetScore";
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率满分1分</summary>
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%</summary>
public const String InternetScore = "InternetScore";
/// <summary>延迟。网络延迟客户端最近一次心跳耗时的一半单位ms</summary>

View File

@ -41,7 +41,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="NewLife.XCode" Version="11.19.2025.701" />
<PackageReference Include="NewLife.XCode" Version="11.19.2025.717-beta0003" />
</ItemGroup>
<ItemGroup>

View File

@ -47,7 +47,7 @@
<ItemGroup>
<PackageReference Include="NewLife.IP" Version="2.3.2025.601" />
<PackageReference Include="NewLife.Redis" Version="6.3.2025.701" />
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.713-beta1545" />
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.719-beta0004" />
</ItemGroup>
<ItemGroup>

View File

@ -50,10 +50,10 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="NewLife.Cube.Core" Version="6.5.2025.711-beta0137" />
<PackageReference Include="NewLife.Cube.Core" Version="6.5.2025.715-beta1654" />
<PackageReference Include="NewLife.IP" Version="2.3.2025.601" />
<PackageReference Include="NewLife.Redis" Version="6.3.2025.701" />
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.713-beta1545" />
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.719-beta0004" />
</ItemGroup>
<ItemGroup>

View File

@ -1,7 +1,5 @@
using System.Net.NetworkInformation;
using System.Text.RegularExpressions;
using NewLife;
using NewLife.Log;
namespace Stardust.Monitors;
@ -32,7 +30,7 @@ public class PingMonitor
{
try
{
var reply = await ping.SendPingAsync(host, 3_000).ConfigureAwait(false);
var reply = await ping.SendPingAsync(host, 5_000).ConfigureAwait(false);
if (reply.Status == IPStatus.Success)
rtTimes.Add(reply.RoundtripTime);
@ -53,7 +51,8 @@ public class PingMonitor
if (latency <= threshold)
latencyScore = 1f;
else
latencyScore = Math.Exp(-0.01 * (latency - threshold)); // 衰减系数λ=0.2
// 衰减系数λ=0.001。1ms为100%10ms为99.1%100ms为90.57%500ms为60.71%1000ms为36.82%
latencyScore = Math.Exp(-0.001 * (latency - threshold));
// 确保得分在0-1之间
var score = successRate * latencyScore;

View File

@ -119,10 +119,10 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="NewLife.Remoting" Version="3.4.2025.713-beta1545" />
<PackageReference Include="NewLife.Remoting" Version="3.4.2025.719-beta0004" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="NewLife.Core" Version="11.5.2025.713-beta1307" />
<PackageReference Include="NewLife.Core" Version="11.5.2025.717-beta0001" />
</ItemGroup>
</Project>

View File

@ -29,7 +29,7 @@ class Program
XTrace.Log.Level = LogLevel.All; // 设置日志级别为所有
Test8();
Test3();
Console.WriteLine("OK!");
Console.ReadKey();
@ -113,40 +113,16 @@ class Program
static void Test3()
{
//var buf = "01005F0004496E666F560000007B2250726F636573734964223A323238342C22".ToHex();
//var udp = new UdpClient();
//udp.Send(buf, "127.0.0.1", 5500);
//var rs = udp.ReceiveString();
//latencyScore = Math.Exp(-0.01 * (latency - threshold)); // 衰减系数λ=0.2
//foreach (Environment.SpecialFolder item in Enum.GetValues(typeof(Environment.SpecialFolder)))
//{
// var v = Environment.GetFolderPath(item);
// Console.WriteLine("{0}:\t{1}", item, v);
//}
var client = new LocalStarClient { Log = XTrace.Log };
//client.ProbeAndInstall(null, "1.6");
var info = client.GetInfo();
var appInfo = new AppInfo(Process.GetCurrentProcess());
for (var i = 0; i < 5; i++)
var ds = new[] { 0.1f, 0.2f, 0.5f, 1f, 2f, 3f, 5f, 10f, 15f, 20f, 30f, 50f, 100f, 200f, 500f, 1000f, 2000f, 5000f };
foreach (var item in ds)
{
_ = client.PingAsync(appInfo, 5);
Thread.Sleep(2000);
var score = Math.Exp(-0.01 * (item - 1f));
var score2 = Math.Exp(-0.005 * (item - 1f));
var score3 = Math.Exp(-0.001 * (item - 1f));
XTrace.WriteLine("{0,-10}:\t{1:p2}\t{2:p2}\t{3:p2}", item, score, score2, score3);
}
Console.WriteLine("等待");
Console.ReadLine();
//var p = Process.GetCurrentProcess();
//var name = p.MainModule.FileName;
//var str = name + Environment.NewLine + name.ToJson();
//str += Environment.NewLine + name.ToJson().ToJsonEntity<String>();
//XTrace.WriteLine(str);
//File.WriteAllText("aa.txt".GetFullPath(), str);
}
static void Test4()

View File

@ -33,7 +33,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="NewLife.Core" Version="11.5.2025.713-beta1307" />
<PackageReference Include="NewLife.Core" Version="11.5.2025.717-beta0001" />
</ItemGroup>
<ItemGroup>