NewLife/NewLife.Remoting

v3.9.2026.0802 服务端请求处理全链路异步化,消除线程阻塞,提升高并发吞吐;新增 IAsyncApiHandler 标记接口,消除处理器路由反射;响应消息注入 TraceId,支持调用链追踪;节点在线与设备在线表新增登录时间字段;增强 WebSocket 心跳判死与会话管理机制;重构设备服务登录与在线持久化流程,统一长连接通知处理;优化 Headers 注入逻辑,避免数组/列表参数转换为字典导致数据丢失;修复客户端与通道代码缺陷,增强健壮性
大石头 authored at 2026-08-02 01:01:05
79e6dc2
Tree
1 Parent(s) 0205b13
Summary: 8 changed files with 51 additions and 9 deletions.
Modified +1 -1
Modified +30 -0
Modified +2 -2
Modified +3 -3
Modified +1 -1
Modified +1 -1
Added +10 -0
Modified +3 -1
Modified +1 -1
diff --git a/Benchmark/NewLife.Remoting.Benchmarks.csproj b/Benchmark/NewLife.Remoting.Benchmarks.csproj
index 4adc26a..ad5ab1a 100644
--- a/Benchmark/NewLife.Remoting.Benchmarks.csproj
+++ b/Benchmark/NewLife.Remoting.Benchmarks.csproj
@@ -13,7 +13,7 @@
 
   <ItemGroup>
     <PackageReference Include="BenchmarkDotNet" Version="0.15.8" />
-    <PackageReference Include="NewLife.Core" Version="11.17.2026.726-beta0124" />
+    <PackageReference Include="NewLife.Core" Version="11.18.2026.801" />
   </ItemGroup>
 
   <ItemGroup>
Modified +30 -0
diff --git a/ChangeLog.md b/ChangeLog.md
index 3adeddd..ca0b1d8 100644
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,35 @@
 # 新生命远程通信库(NewLife.Remoting)变更日志
 
+## v3.9.2026.0802 (2026-08-02)
+
+### 性能优化
+- **服务端全链路异步化**:服务端请求处理全链路异步化,消除线程阻塞,提升高并发场景吞吐能力
+- **处理器路由反射消除**:新增 `IAsyncApiHandler` 标记接口,消除处理器路由反射,降低调用开销
+- **热路径性能优化**:优化热路径反射与模型绑定性能,移除接口实现类型静态缓存改为动态解析
+
+### 新功能
+- **TraceId 调用链追踪**:响应消息自动注入 TraceId,支持跨服务调用链追踪
+- **登录时间字段**:节点在线与设备在线表新增登录时间字段,便于在线状态审计
+
+### WebSocket 增强
+- **心跳判死优化**:优化 WebSocket 心跳判死机制与会话管理,提升连接稳定性
+- **断开日志降级**:WebSocket 正常断开异常从 Error 降为 Debug,减少误报警日志
+
+### 设备服务与在线管理
+- **在线记录优化**:在线记录长连接字段重命名与结算机制优化,统一长连接通知处理流程
+- **登录持久化统一**:重构设备登录与在线持久化流程,统一在 Login 方法执行,兼容不同 SessionID 字段命名
+- **控制器基类重构**:重构控制器基类依赖注入与构造逻辑,优化设备上下文 Online 获取方式
+
+### 客户端与健壮性
+- **客户端缺陷修复**:修复客户端与通道代码缺陷,优化连接池与异步调用,增强健壮性
+- **Upgrade 健壮性**:增强自动更新 `Upgrade.Run` 健壮性与路径处理
+- **Headers 注入优化**:优化 Headers 注入逻辑,避免数组/列表类型参数转换为字典导致数据丢失
+
+### 测试与质量
+- **测试扩展**:补充 CancellationToken 与设备控制器 HTTP 端点测试,同步测试计数至 631;统一测试用例端口复用配置;升级 ObjectPool 与 NewLife.* 依赖包版本
+
+---
+
 ## v3.8.2026.0706 (2026-07-06)
 
 ### RPC 流式调用增强
Modified +2 -2
diff --git a/NewLife.Remoting.Extensions/NewLife.Remoting.Extensions.csproj b/NewLife.Remoting.Extensions/NewLife.Remoting.Extensions.csproj
index 5d4f38f..b6dbe73 100644
--- a/NewLife.Remoting.Extensions/NewLife.Remoting.Extensions.csproj
+++ b/NewLife.Remoting.Extensions/NewLife.Remoting.Extensions.csproj
@@ -7,7 +7,7 @@
     <Description>提供设备接入控制器、令牌服务与会话管理扩展</Description>
     <Company>新生命开发团队</Company>
     <Copyright>©2002-2026 NewLife</Copyright>
-    <VersionPrefix>3.8</VersionPrefix>
+    <VersionPrefix>3.9</VersionPrefix>
     <VersionSuffix>$([System.DateTime]::Now.ToString(`yyyy.MMdd`))</VersionSuffix>
     <Version>$(VersionPrefix).$(VersionSuffix)</Version>
     <FileVersion>$(Version)</FileVersion>
@@ -33,7 +33,7 @@
     <RepositoryUrl>https://github.com/NewLifeX/NewLife.Remoting</RepositoryUrl>
     <RepositoryType>git</RepositoryType>
     <PackageTags>新生命团队;X组件;NewLife;$(AssemblyName)</PackageTags>
-    <PackageReleaseNotes>新增 Server-Streaming 流式调用与元数据透传,提升大规模数据推送效率;重构指令下发架构,支持响应总线与同步等待机制;支持 SSE 通道自动降级推送与 WebSocket 积压命令推送,增强推送兼容性;增强自动更新机制,支持冒烟测试、回滚与 Linux 兼容性;精简命令模型,移除持久化与重试实现,降低复杂度;修复设备控制器异常处理,优化客户端健壮性</PackageReleaseNotes>
+    <PackageReleaseNotes>服务端请求处理全链路异步化,消除线程阻塞,提升高并发吞吐;新增 IAsyncApiHandler 标记接口,消除处理器路由反射;响应消息注入 TraceId,支持调用链追踪;节点在线与设备在线表新增登录时间字段;增强 WebSocket 心跳判死与会话管理机制;重构设备服务登录与在线持久化流程,统一长连接通知处理;优化 Headers 注入逻辑,避免数组/列表参数转换为字典导致数据丢失;修复客户端与通道代码缺陷,增强健壮性</PackageReleaseNotes>
     <PackageLicenseExpression>MIT</PackageLicenseExpression>
     <PublishRepositoryUrl>true</PublishRepositoryUrl>
     <EmbedUntrackedSources>true</EmbedUntrackedSources>
Modified +3 -3
diff --git a/NewLife.Remoting/NewLife.Remoting.csproj b/NewLife.Remoting/NewLife.Remoting.csproj
index e447ced..922b5ac 100644
--- a/NewLife.Remoting/NewLife.Remoting.csproj
+++ b/NewLife.Remoting/NewLife.Remoting.csproj
@@ -5,7 +5,7 @@
     <Description>提供RPC、HTTP、WebSocket与SRMP统一通信能力</Description>
     <Company>新生命开发团队</Company>
     <Copyright>©2002-2026 新生命开发团队</Copyright>
-    <VersionPrefix>3.8</VersionPrefix>
+    <VersionPrefix>3.9</VersionPrefix>
     <VersionSuffix>$([System.DateTime]::Now.ToString(`yyyy.MMdd`))</VersionSuffix>
     <Version>$(VersionPrefix).$(VersionSuffix)</Version>
     <FileVersion>$(Version)</FileVersion>
@@ -30,7 +30,7 @@
     <RepositoryUrl>https://github.com/NewLifeX/NewLife.Remoting</RepositoryUrl>
     <RepositoryType>git</RepositoryType>
     <PackageTags>新生命团队;X组件;NewLife;$(AssemblyName)</PackageTags>
-    <PackageReleaseNotes>新增 Server-Streaming 流式调用与元数据透传,提升大规模数据推送效率;重构指令下发架构,支持响应总线与同步等待机制;支持 SSE 通道自动降级推送与 WebSocket 积压命令推送,增强推送兼容性;增强自动更新机制,支持冒烟测试、回滚与 Linux 兼容性;精简命令模型,移除持久化与重试实现,降低复杂度;修复设备控制器异常处理,优化客户端健壮性</PackageReleaseNotes>
+    <PackageReleaseNotes>服务端请求处理全链路异步化,消除线程阻塞,提升高并发吞吐;新增 IAsyncApiHandler 标记接口,消除处理器路由反射;响应消息注入 TraceId,支持调用链追踪;节点在线与设备在线表新增登录时间字段;增强 WebSocket 心跳判死与会话管理机制;重构设备服务登录与在线持久化流程,统一长连接通知处理;优化 Headers 注入逻辑,避免数组/列表参数转换为字典导致数据丢失;修复客户端与通道代码缺陷,增强健壮性</PackageReleaseNotes>
     <PackageLicenseExpression>MIT</PackageLicenseExpression>
     <PublishRepositoryUrl>true</PublishRepositoryUrl>
     <EmbedUntrackedSources>true</EmbedUntrackedSources>
@@ -54,7 +54,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="NewLife.Core" Version="11.17.2026.726-beta0124" />
+    <PackageReference Include="NewLife.Core" Version="11.18.2026.801" />
   </ItemGroup>
 
   <ItemGroup>
Modified +1 -1
diff --git a/Readme.MD b/Readme.MD
index 97aabb2..85d4570 100644
--- a/Readme.MD
+++ b/Readme.MD
@@ -40,7 +40,7 @@ NewLife.Remoting 是 NewLife 技术栈的统一远程通信基础设施,由两
 
 | 核心能力 | 说明 |
 |:---------|------|
-| **RPC 核心框架** | SRMP 协议、JSON/二进制编解码、请求处理流水线、客户端/服务端、Cluster 连接管理、元数据传递、重试策略 |
+| **RPC 核心框架** | SRMP 协议、JSON/二进制编解码、请求处理流水线、客户端/服务端、Cluster 连接管理、元数据传递、重试策略、服务端全链路异步化、TraceId 调用链追踪 |
 | **STRM 流式调用** | Server-Streaming:`IAsyncEnumerable<T>` 逐条推送,SRMP + SSE 双协议 |
 | **CLNT 客户端基类** | 登录/心跳/升级/指令/事件一站式封装,WS/SSE 双通道自动切换 |
 | **UPGD 自动更新** | 检测→下载→校验→解压→覆盖→重启全链路 |
Modified +1 -1
diff --git a/Test/Test.csproj b/Test/Test.csproj
index 9e68230..befb3ff 100644
--- a/Test/Test.csproj
+++ b/Test/Test.csproj
@@ -12,7 +12,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="NewLife.Core" Version="11.17.2026.726-beta0124" />
+    <PackageReference Include="NewLife.Core" Version="11.18.2026.801" />
   </ItemGroup>
 
   <ItemGroup>
Added +10 -0
diff --git a/XUnitTest/xunit.runsettings b/XUnitTest/xunit.runsettings
new file mode 100644
index 0000000..c3f090c
--- /dev/null
+++ b/XUnitTest/xunit.runsettings
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RunSettings>
+  <RunConfiguration>
+    <TestCaseFilter>FullyQualifiedName~XUnitTest</TestCaseFilter>
+  </RunConfiguration>
+  <xUnit>
+    <ParallelizeTestCollections>false</ParallelizeTestCollections>
+    <MaxParallelThreads>1</MaxParallelThreads>
+  </xUnit>
+</RunSettings>
Modified +3 -1
diff --git a/XUnitTest/XUnitTest.csproj b/XUnitTest/XUnitTest.csproj
index 3786265..c292ed4 100644
--- a/XUnitTest/XUnitTest.csproj
+++ b/XUnitTest/XUnitTest.csproj
@@ -8,6 +8,8 @@
     <SignAssembly>True</SignAssembly>
     <AssemblyOriginatorKeyFile>..\Doc\newlife.snk</AssemblyOriginatorKeyFile>
     <IsPackable>false</IsPackable>
+    <!-- 网络集成测试较多,限制并行度避免资源竞争导致偶发超时;配合 XUnitTest/xunit.runsettings -->
+    <RunSettingsFilePath>$(MSBuildProjectDirectory)\xunit.runsettings</RunSettingsFilePath>
     <!-- 测试代码中大量使用 ? 注解但无可空上下文,统一抑制 CS8632 -->
     <NoWarn>$(NoWarn);CS8632</NoWarn>
   </PropertyGroup>
@@ -17,7 +19,7 @@
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.8.1" />
     <PackageReference Include="NewLife.XCode" Version="12.0.2026.701" />
     <PackageReference Include="Moq" Version="4.20.72" />
-    <PackageReference Include="NewLife.Core" Version="11.17.2026.726-beta0124" />
+    <PackageReference Include="NewLife.Core" Version="11.18.2026.801" />
     <PackageReference Include="NewLife.UnitTest" Version="1.1.2026.102" />
     <PackageReference Include="xunit" Version="2.9.3" />
     <PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">