Browse Source

Increase max number of connections + write plaintext synchronously (#8829)

* New versions

* Synchronous plaintext generation

* Write byte array

* Increase number of connections

* Determine string length dynamically

---------

Co-authored-by: LLT21 <[email protected]>
Co-authored-by: LLT21 <>
LLT21 1 year ago
parent
commit
39786923c6

+ 1 - 4
frameworks/CSharp/appmpower/src/Data/DbConnection.cs

@@ -142,10 +142,7 @@ namespace appMpower.Data
 
       public async Task OpenAsync()
       {
-#if ADO && SQLSERVER
-         _internalConnection = new();
-         _internalConnection.DbConnection = new System.Data.SqlClient.SqlConnection(_connectionString);
-#elif ADO && POSTGRESQL
+#if ADO && POSTGRESQL
          _internalConnection = new(); 
          _internalConnection.DbConnection = new Npgsql.NpgsqlConnection(_connectionString);
 #else

+ 1 - 1
frameworks/CSharp/appmpower/src/Data/DbConnections.cs

@@ -7,7 +7,7 @@ namespace appMpower.Data
    {
       private static bool _connectionsCreated = false;
       private static short _createdConnections = 0;
-      private static short _maxConnections = 250;
+      private static short _maxConnections = 500;
 
       private static ConcurrentStack<InternalConnection> _stack = new();
       private static ConcurrentQueue<TaskCompletionSource<InternalConnection>> _waitingQueue = new();

+ 2 - 1
frameworks/CSharp/appmpower/src/HttpApplication.cs

@@ -35,7 +35,8 @@ namespace appMpower
 
             if (pathStringLength == 10 && pathStringStart == "p")
             {
-               await PlainText.RenderAsync(httpResponse.Headers, httpResponseBody.Writer, _plainText);
+               //await PlainText.RenderAsync(httpResponse.Headers, httpResponseBody.Writer, _plainText);
+               PlainText.Render(httpResponse.Headers, httpResponseBody, _plainText);
                return;
             }
             else if (pathStringLength == 5 && pathStringStart == "j")

+ 11 - 0
frameworks/CSharp/appmpower/src/Kestrel/PlainText.cs

@@ -4,6 +4,7 @@ using System.Collections.Generic;
 using System.IO.Pipelines;
 using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Primitives;
+using Microsoft.AspNetCore.Http.Features;
 
 namespace appMpower.Kestrel
 {
@@ -23,5 +24,15 @@ namespace appMpower.Kestrel
          await pipeWriter.WriteAsync(utf8String);
          pipeWriter.Complete();
       }
+
+      public static void Render(IHeaderDictionary headerDictionary, IHttpResponseBodyFeature httpResponseBodyFeature, byte[] utf8String)
+      {
+         headerDictionary.Add(_headerServer);
+         headerDictionary.Add(_headerContentType);
+         int length = utf8String.Length;
+         headerDictionary.Add(new KeyValuePair<string, StringValues>("Content-Length", length.ToString()));
+
+         httpResponseBodyFeature.Stream.Write(utf8String, 0, length);
+      }
    }
 }

+ 1 - 0
frameworks/CSharp/appmpower/src/Program.cs

@@ -19,6 +19,7 @@ namespace appMpower
          var kestrelServerOptions = new KestrelServerOptions();
 
          kestrelServerOptions.Listen(IPAddress.Any, 8080);
+         kestrelServerOptions.AllowSynchronousIO = true; 
          kestrelServerOptions.AddServerHeader = false;
 
          using var kestrelServer = new KestrelServer(Options.Create(kestrelServerOptions), socketTransportFactory, NullLoggerFactory.Instance);

+ 1 - 1
frameworks/CSharp/appmpower/src/appMpower.csproj

@@ -43,7 +43,7 @@
 
   <ItemGroup>
     <PackageReference Include="System.Data.Odbc" Version="8.0.0" />
-    <PackageReference Include="Npgsql" Version="8.0.0-*" />
+    <PackageReference Include="Npgsql" Version="8.0.2-*" />
   </ItemGroup>
 
   <PropertyGroup>