Browse Source

Optimization (TouchSocket): Upgrade the target framework and dependen… (#10330)

* Optimization (TouchSocket): Upgrade the target framework and dependency versions.

Upgrade all projects to .NET 10.0 and update the dependency packages to the latest versions.

* 新增(Program): 增加管道配置及优化内存管理

新增对 System.Buffers 和 System.IO.Pipelines 的引用,优化内存分配和数据流处理。在 TouchSocketConfig 中新增 ReceivePipeOptions 和 SendPipeOptions 配置,支持自定义管道选项。将部分变量声明改为显式类型以提升代码可读性。新增对 System.Text.Json.Serialization 和 TouchSocket.Rpc 的引用,为后续功能扩展做准备。容器配置中新增 AddRpcStore 调用,支持 RPC 功能。

* 新增(Program.cs): 配置管道选项优化服务器性能

引入 `System.Buffers` 和 `System.IO.Pipelines` 命名空间以支持内存池和管道功能。将 `server` 变量的声明从 `var` 改为显式类型 `MyServer`。在 `SetupAsync` 方法中,添加 `TransportOption` 配置,设置 `BufferOnDemand` 为 `false`,并配置 `ReceivePipeOptions` 和 `SendPipeOptions`,以优化服务器性能。删除多余空行。
若汝棋茗 2 weeks ago
parent
commit
ba8bfe90bb

+ 23 - 3
frameworks/CSharp/touchsocket/src/TouchSocketHttp/Program.cs

@@ -1,3 +1,5 @@
+using System.Buffers;
+using System.IO.Pipelines;
 using System.Text;
 using TouchSocket.Core;
 using TouchSocket.Http;
@@ -10,7 +12,7 @@ public class Program
     private static async Task Main(string[] args)
     {
         int port = 8080;
-        var service = new MyHttpService();
+        MyHttpService service = new MyHttpService();
 
         await service.SetupAsync(new TouchSocketConfig()
              .SetListenIPHosts(port)
@@ -18,6 +20,24 @@ public class Program
               .SetTransportOption(options =>
               {
                   options.BufferOnDemand = false;
+
+                  options.ReceivePipeOptions = new PipeOptions(
+                pool: MemoryPool<byte>.Shared,
+                readerScheduler: PipeScheduler.ThreadPool,
+                writerScheduler: PipeScheduler.ThreadPool,
+                pauseWriterThreshold: 1024 * 1024,
+                resumeWriterThreshold: 1024 * 512,
+                minimumSegmentSize: -1,
+                useSynchronizationContext: false);
+
+                  options.SendPipeOptions = new PipeOptions(
+                pool: MemoryPool<byte>.Shared,
+                readerScheduler: PipeScheduler.ThreadPool,
+                writerScheduler: PipeScheduler.ThreadPool,
+                pauseWriterThreshold: 64 * 1024,
+                resumeWriterThreshold: 32 * 1024,
+                minimumSegmentSize: -1,
+                useSynchronizationContext: false);
               })
              .ConfigureContainer(a =>
              {
@@ -48,8 +68,8 @@ internal sealed class MyHttpSessionClient : HttpSessionClient
 
     protected override async Task OnReceivedHttpRequest(HttpContext httpContext)
     {
-        var request = httpContext.Request;
-        var response = httpContext.Response;
+        HttpRequest request = httpContext.Request;
+        HttpResponse response = httpContext.Response;
 
         switch (request.RelativeURL)
         {

+ 2 - 2
frameworks/CSharp/touchsocket/src/TouchSocketHttp/TouchSocketHttp.csproj

@@ -1,14 +1,14 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
 	<PropertyGroup>
-		<TargetFramework>net9.0</TargetFramework>
+		<TargetFramework>net10.0</TargetFramework>
 		<Nullable>enable</Nullable>
 		<OutputType>Exe</OutputType>
 		<ImplicitUsings>enable</ImplicitUsings>
 	</PropertyGroup>
 
 	<ItemGroup>
-		<PackageReference Include="TouchSocket.WebApi" Version="4.0.0-rc.46" />
+		<PackageReference Include="TouchSocket.WebApi" Version="4.0.0" />
 	</ItemGroup>
 </Project>
 

+ 1 - 1
frameworks/CSharp/touchsocket/src/TouchSocketHttp31/TouchSocketHttp31.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
 	<PropertyGroup>
-		<TargetFramework>net8.0</TargetFramework>
+		<TargetFramework>net10.0</TargetFramework>
 		<Nullable>enable</Nullable>
 		<OutputType>Exe</OutputType>
 		<ImplicitUsings>enable</ImplicitUsings>

+ 26 - 2
frameworks/CSharp/touchsocket/src/TouchSocketHttpPlatform/Program.cs

@@ -10,6 +10,8 @@
 // 感谢您的下载和使用
 // ------------------------------------------------------------------------------
 
+using System.Buffers;
+using System.IO.Pipelines;
 using TouchSocket.Core;
 using TouchSocket.Sockets;
 
@@ -19,10 +21,32 @@ internal class Program
 {
     private static async Task Main(string[] args)
     {
-        var server = new MyServer();
+        MyServer server = new MyServer();
         await server.SetupAsync(new TouchSocketConfig()
             .SetListenIPHosts(8080)
             .SetMaxCount(1000000)
+            .SetTransportOption(options =>
+            {
+                options.BufferOnDemand = false;
+
+                options.ReceivePipeOptions = new PipeOptions(
+              pool: MemoryPool<byte>.Shared,
+              readerScheduler: PipeScheduler.ThreadPool,
+              writerScheduler: PipeScheduler.ThreadPool,
+              pauseWriterThreshold: 1024 * 1024,
+              resumeWriterThreshold: 1024 * 512,
+              minimumSegmentSize: -1,
+              useSynchronizationContext: false);
+
+                options.SendPipeOptions = new PipeOptions(
+              pool: MemoryPool<byte>.Shared,
+              readerScheduler: PipeScheduler.ThreadPool,
+              writerScheduler: PipeScheduler.ThreadPool,
+              pauseWriterThreshold: 64 * 1024,
+              resumeWriterThreshold: 32 * 1024,
+              minimumSegmentSize: -1,
+              useSynchronizationContext: false);
+            })
             .ConfigureContainer(a =>
             {
                 a.AddConsoleLogger();
@@ -30,7 +54,7 @@ internal class Program
 
         await server.StartAsync();
         Console.WriteLine("HTTP服务器已启动,端口: 8080");
-        
+
         while (true)
         {
             Console.ReadLine();

+ 2 - 2
frameworks/CSharp/touchsocket/src/TouchSocketHttpPlatform/TouchSocketHttpPlatform.csproj

@@ -2,12 +2,12 @@
 
 	<PropertyGroup>
 		<OutputType>Exe</OutputType>
-		<TargetFramework>net9.0</TargetFramework>
+		<TargetFramework>net10.0</TargetFramework>
 		<ImplicitUsings>enable</ImplicitUsings>
 		<Nullable>enable</Nullable>
 	</PropertyGroup>
 
 	<ItemGroup>
-		<PackageReference Include="TouchSocket" Version="4.0.0-rc.46" />
+		<PackageReference Include="TouchSocket" Version="4.0.0" />
 	</ItemGroup>
 </Project>

+ 20 - 0
frameworks/CSharp/touchsocket/src/TouchSocketWebApi/Program.cs

@@ -1,3 +1,5 @@
+using System.Buffers;
+using System.IO.Pipelines;
 using System.Text;
 using System.Text.Json.Serialization;
 using TouchSocket.Core;
@@ -21,6 +23,24 @@ public class Program
             .SetTransportOption(options =>
             {
                 options.BufferOnDemand = false;
+
+                options.ReceivePipeOptions = new PipeOptions(
+                pool: MemoryPool<byte>.Shared,
+                readerScheduler: PipeScheduler.ThreadPool,
+                writerScheduler: PipeScheduler.ThreadPool,
+                pauseWriterThreshold: 1024 * 1024,
+                resumeWriterThreshold: 1024 * 512,
+                minimumSegmentSize: -1,
+                useSynchronizationContext: false);
+
+                options.SendPipeOptions = new PipeOptions(
+              pool: MemoryPool<byte>.Shared,
+              readerScheduler: PipeScheduler.ThreadPool,
+              writerScheduler: PipeScheduler.ThreadPool,
+              pauseWriterThreshold: 64 * 1024,
+              resumeWriterThreshold: 32 * 1024,
+              minimumSegmentSize: -1,
+              useSynchronizationContext: false);
             })
            .ConfigureContainer(a =>
            {

+ 4 - 4
frameworks/CSharp/touchsocket/src/TouchSocketWebApi/TouchSocketWebApi.csproj

@@ -1,15 +1,15 @@
 <Project Sdk="Microsoft.NET.Sdk.Worker">
 
 	<PropertyGroup>
-		<TargetFramework>net9.0</TargetFramework>
+		<TargetFramework>net10.0</TargetFramework>
 		<Nullable>enable</Nullable>
 		<ImplicitUsings>enable</ImplicitUsings>
 		<UserSecretsId>dotnet-WorkerService1-19b37b17-6043-4334-ad9a-9e0e3c670da3</UserSecretsId>
 	</PropertyGroup>
 
 	<ItemGroup>
-		<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.0" />
-		<PackageReference Include="TouchSocket.Hosting" Version="4.0.0-rc.46" />
-		<PackageReference Include="TouchSocket.WebApi" Version="4.0.0-rc.46" />
+		<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.0" />
+		<PackageReference Include="TouchSocket.Hosting" Version="4.0.0" />
+		<PackageReference Include="TouchSocket.WebApi" Version="4.0.0" />
 	</ItemGroup>
 </Project>

+ 2 - 2
frameworks/CSharp/touchsocket/src/TouchSocketWebApi31/TouchSocketWebApi31.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk.Worker">
 
 	<PropertyGroup>
-		<TargetFramework>net8.0</TargetFramework>
+		<TargetFramework>net10.0</TargetFramework>
 		<Nullable>enable</Nullable>
 		<ImplicitUsings>enable</ImplicitUsings>
 		<InvariantGlobalization>true</InvariantGlobalization>
@@ -11,7 +11,7 @@
 	</PropertyGroup>
 
 	<ItemGroup>
-		<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
+		<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.0" />
 		<PackageReference Include="TouchSocket.Hosting" Version="3.1.0" />
 		<PackageReference Include="TouchSocket.WebApi" Version="3.1.0" />
 	</ItemGroup>

+ 2 - 2
frameworks/CSharp/touchsocket/touchsocket-http.dockerfile

@@ -1,9 +1,9 @@
-FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
+FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
 WORKDIR /app
 COPY src/TouchSocketHttp .
 RUN dotnet publish -c Release -o out
 
-FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
+FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
 
 WORKDIR /app
 COPY --from=build /app/out ./

+ 2 - 2
frameworks/CSharp/touchsocket/touchsocket-http31.dockerfile

@@ -1,9 +1,9 @@
-FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
 WORKDIR /app
 COPY src/TouchSocketHttp31 .
 RUN dotnet publish -c Release -o out
 
-FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
+FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
 
 WORKDIR /app
 COPY --from=build /app/out ./

+ 2 - 2
frameworks/CSharp/touchsocket/touchsocket-httpplatform.dockerfile

@@ -1,9 +1,9 @@
-FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
+FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
 WORKDIR /app
 COPY src/TouchSocketHttpPlatform .
 RUN dotnet publish -c Release -o out
 
-FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
+FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
 
 WORKDIR /app
 COPY --from=build /app/out ./

+ 2 - 2
frameworks/CSharp/touchsocket/touchsocket-webapi31.dockerfile

@@ -1,9 +1,9 @@
-FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
 WORKDIR /app
 COPY src/TouchSocketWebApi31 .
 RUN dotnet publish -c Release -o out
 
-FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
+FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
 
 WORKDIR /app
 COPY --from=build /app/out ./

+ 2 - 2
frameworks/CSharp/touchsocket/touchsocket.dockerfile

@@ -1,9 +1,9 @@
-FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
+FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
 WORKDIR /app
 COPY src/TouchSocketWebApi .
 RUN dotnet publish -c Release -o out
 
-FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
+FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
 
 WORKDIR /app
 COPY --from=build /app/out ./