lith 4 anni fa
parent
commit
8b1d927af1

+ 12 - 8
dotnet/Library/Sers/Sers.CL/Socket/Sers.CL.Socket.Iocp/Base/DeliveryClient_Base.cs

@@ -10,14 +10,21 @@ using Sers.Core.CL.MessageDelivery;
 using Vit.Core.Module.Log;
 using Vit.Core.Util.Net;
 using Vit.Core.Util.Pool;
-using Vit.Core.Util.Threading;
 
 namespace Sers.CL.Socket.Iocp.Base
 {
     public class DeliveryClient_Base<DeliveryConnection> : IDeliveryClient
         where DeliveryConnection : DeliveryConnection_Base,new()
     {
+        public virtual DeliveryConnection NewConnection()
+        {
+            var conn = _conn;
+            conn.securityManager = securityManager;
+            return conn;
+        }
+
 
+        public Sers.Core.Util.StreamSecurity.SecurityManager securityManager;
 
         protected DeliveryConnection _conn = new DeliveryConnection();
         public IDeliveryConnection conn => _conn;
@@ -43,18 +50,15 @@ namespace Sers.CL.Socket.Iocp.Base
 
 
         /// <summary>
-        /// 接收缓存区大小
+        /// 接收缓存区大小(单位:byte,默认:8192)
         /// </summary>
         public int receiveBufferSize = 8 * 1024;
 
 
         public DeliveryClient_Base()
         {
-
-            _conn.receiveEventArgs = receiveEventArgs = new SocketAsyncEventArgs();
-
+            receiveEventArgs = new SocketAsyncEventArgs();
             receiveEventArgs.Completed += new EventHandler<SocketAsyncEventArgs>(IO_Completed);
-
         }
 
 
@@ -76,6 +80,8 @@ namespace Sers.CL.Socket.Iocp.Base
                 socket = new global::System.Net.Sockets.Socket(hostEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
 
 
+                var conn = NewConnection();
+                _conn.receiveEventArgs = receiveEventArgs;
                 _conn.Init(socket);
 
                 var buff = DataPool.BytesGet(receiveBufferSize);
@@ -113,8 +119,6 @@ namespace Sers.CL.Socket.Iocp.Base
 
         public virtual void Close()
         {
- 
-
             if (null == _conn) return;
             var conn = _conn;
             _conn = null;

+ 9 - 4
dotnet/Library/Sers/Sers.CL/Socket/Sers.CL.Socket.Iocp/Base/DeliveryServer_Base.cs

@@ -19,12 +19,18 @@ namespace Sers.CL.Socket.Iocp.Base
     public abstract class DeliveryServer_Base<DeliveryConnection> : IDeliveryServer
         where DeliveryConnection : DeliveryConnection_Base, new()
     {
+        public virtual DeliveryConnection NewConnection()
+        {
+            var conn = new DeliveryConnection();
+            conn.securityManager = securityManager;
+            return conn;
+        }
 
 
         public Sers.Core.Util.StreamSecurity.SecurityManager securityManager;
 
         /// <summary>
-        /// 服务端 监听地址。若不指定则监听所有网卡。例如: "127.0.0.1"、"sers.cloud"。
+        /// 服务端 监听地址。若不指定则监听所有网卡。例如: "127.0.0.1"、"localhost"。
         /// </summary>
         public string host = null;
 
@@ -36,7 +42,7 @@ namespace Sers.CL.Socket.Iocp.Base
 
 
         /// <summary>
-        /// 接收缓存区大小
+        /// 接收缓存区大小(单位:byte,默认:8192)
         /// </summary>
         public int receiveBufferSize = 8 * 1024;
 
@@ -321,8 +327,7 @@ namespace Sers.CL.Socket.Iocp.Base
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         private DeliveryConnection Delivery_OnConnected(global::System.Net.Sockets.Socket socket)
         {
-            var conn = new DeliveryConnection();
-            conn.securityManager = securityManager;
+            var conn = NewConnection();
             conn.Init(socket);
 
             conn.Conn_OnDisconnected = Delivery_OnDisconnected;

+ 25 - 5
dotnet/Library/Sers/Sers.CL/Socket/Sers.CL.Socket.Iocp/Mode/SpinWait/DeliveryClient.cs

@@ -10,6 +10,28 @@ namespace Sers.CL.Socket.Iocp.Mode.SpinWait
 {
     public class DeliveryClient : DeliveryClient_Base<DeliveryConnection>
     {
+        #region NewConnection
+
+        /// <summary>
+        /// 发送缓冲区数据块的最小大小(单位:byte,默认 1000000)
+        /// </summary>
+        public int sendBufferSize = 1_000_000;
+
+        /// <summary>
+        /// 发送缓冲区个数(默认1024)
+        /// </summary>
+        public int sendBufferCount = 1024;
+        public override DeliveryConnection NewConnection()
+        {
+            var conn = base.NewConnection();
+            conn.SetConfig(sendBufferSize, sendBufferCount);
+            return conn;
+        }
+        #endregion
+
+
+
+
         #region Connect Close
 
         public override bool Connect()
@@ -62,14 +84,12 @@ namespace Sers.CL.Socket.Iocp.Mode.SpinWait
 
 
 
-
-
         #region Send
 
         /// <summary>
-        /// 单位:毫秒
+        /// 发送缓冲区刷新间隔(单位:毫秒,默认:1)
         /// </summary>
-        public int sendInterval = 1;
+        public int sendFlushInterval = 1;
 
         LongTaskHelp Send_task = new LongTaskHelp();
 
@@ -82,7 +102,7 @@ namespace Sers.CL.Socket.Iocp.Mode.SpinWait
                 try
                 {
                     _conn.FlushSendFrameQueue();
-                    global::System.Threading.SpinWait.SpinUntil(() => false, sendInterval);
+                    global::System.Threading.SpinWait.SpinUntil(() => false, sendFlushInterval);
                 }
                 catch (Exception ex) when (!(ex.GetBaseException() is ThreadInterruptedException))
                 {

+ 23 - 10
dotnet/Library/Sers/Sers.CL/Socket/Sers.CL.Socket.Iocp/Mode/SpinWait/DeliveryServer.cs

@@ -10,6 +10,25 @@ namespace Sers.CL.Socket.Iocp.Mode.SpinWait
 {
     public class DeliveryServer : DeliveryServer_Base<DeliveryConnection>
     {
+        #region NewConnection
+
+        /// <summary>
+        /// 发送缓冲区数据块的最小大小(单位:byte,默认 1000000)
+        /// </summary>
+        public int sendBufferSize = 1_000_000;
+
+        /// <summary>
+        /// 发送缓冲区个数(默认1024)
+        /// </summary>
+        public int sendBufferCount = 1024;
+        public override DeliveryConnection NewConnection()
+        {
+            var conn = base.NewConnection();
+            conn.SetConfig(sendBufferSize, sendBufferCount);
+            return conn;
+        }
+        #endregion
+
 
 
         #region Start Stop
@@ -63,15 +82,12 @@ namespace Sers.CL.Socket.Iocp.Mode.SpinWait
 
 
 
-
-
-
         #region Send
 
         /// <summary>
-        /// 单位:毫秒
+        /// 发送缓冲区刷新间隔(单位:毫秒,默认:1)
         /// </summary>
-        public int sendInterval = 1;
+        public int sendFlushInterval = 1;
 
         LongTaskHelp Send_task = new LongTaskHelp();
 
@@ -87,7 +103,7 @@ namespace Sers.CL.Socket.Iocp.Mode.SpinWait
                     {
                         conn.FlushSendFrameQueue();
                     }
-                    global::System.Threading.SpinWait.SpinUntil(() => false, sendInterval);
+                    global::System.Threading.SpinWait.SpinUntil(() => false, sendFlushInterval);
                 }
                 catch (Exception ex) when (!(ex.GetBaseException() is ThreadInterruptedException))
                 {
@@ -96,10 +112,7 @@ namespace Sers.CL.Socket.Iocp.Mode.SpinWait
             }            
         }
 
-        #endregion
-
-
-         
+        #endregion         
 
 
     }

+ 23 - 3
dotnet/Library/Sers/Sers.CL/Socket/Sers.CL.Socket.Iocp/Mode/Timer/DeliveryClient.cs

@@ -9,6 +9,26 @@ namespace Sers.CL.Socket.Iocp.Mode.Timer
     public class DeliveryClient : DeliveryClient_Base<DeliveryConnection>
     {
 
+        #region NewConnection       
+        /// <summary>
+        /// 发送缓冲区数据块的最小大小(单位:byte,默认 1000000)
+        /// </summary>
+        public int sendBufferSize = 1_000_000;
+
+        /// <summary>
+        /// 发送缓冲区个数(默认1024)
+        /// </summary>
+        public int sendBufferCount = 1024;
+        public override DeliveryConnection NewConnection()
+        {
+            var conn = base.NewConnection();
+            conn.SetConfig(sendBufferSize, sendBufferCount);
+            return conn;
+        }
+        #endregion
+
+
+
         #region Connect Close
 
         public override bool Connect()
@@ -24,7 +44,7 @@ namespace Sers.CL.Socket.Iocp.Mode.Timer
                 }
 
                 //(x.4)
-                Send_timer.intervalMs = sendInterval;
+                Send_timer.intervalMs = sendFlushInterval;
                 Send_timer.timerCallback = Send_Flush;
                 Send_timer.Start();
 
@@ -64,9 +84,9 @@ namespace Sers.CL.Socket.Iocp.Mode.Timer
 
         #region Send
         /// <summary>
-        /// 单位:毫秒
+        /// 发送缓冲区刷新间隔(单位:毫秒,默认:1)
         /// </summary>
-        public int sendInterval = 1;
+        public int sendFlushInterval = 1;
 
         SersTimer_SingleThread Send_timer = new SersTimer_SingleThread();
 

+ 26 - 6
dotnet/Library/Sers/Sers.CL/Socket/Sers.CL.Socket.Iocp/Mode/Timer/DeliveryConnection.cs

@@ -11,14 +11,34 @@ namespace Sers.CL.Socket.Iocp.Mode.Timer
 {
     public class DeliveryConnection : DeliveryConnection_Base
     {
+        public void SetConfig(int sendBufferSize /*= 1_000_000*/, int sendBufferCount /*= 1024*/)
+        {
+            this.sendBufferSize = sendBufferSize;
+            this.sendBufferCount = sendBufferCount;
+            buffer = new ByteData[sendBufferCount];
+            bufferItemCount = new int[sendBufferCount];
+        }
 
         #region Send
 
         ConcurrentQueue<ByteData> frameQueueToSend = new ConcurrentQueue<ByteData>();
 
-        const int buffLength = 1024;
-        ByteData[] buffer = new ByteData[buffLength];
-        int[] bufferItemCount = new int[buffLength];
+
+        /// <summary>
+        /// 发送缓冲区数据块的最小大小(单位:byte)
+        /// </summary>
+        public int sendBufferSize ;
+
+        /// <summary>
+        /// 发送缓冲区个数
+        /// </summary>
+        int sendBufferCount;
+
+        ByteData[] buffer ;
+        int[] bufferItemCount ;
+
+   
+
 
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public override void SendFrameAsync(Vit.Core.Util.Pipelines.ByteData data)
@@ -44,7 +64,7 @@ namespace Sers.CL.Socket.Iocp.Mode.Timer
                         {
                             buffer[curIndex++] = item;
 
-                            if (curIndex == buffLength)
+                            if (curIndex == sendBufferCount)
                             {
                                 break;
                             }
@@ -58,7 +78,7 @@ namespace Sers.CL.Socket.Iocp.Mode.Timer
 
                     FlushData(curIndex);
 
-                    if (curIndex < buffLength)
+                    if (curIndex < sendBufferCount)
                     {
                         return;
                     }
@@ -111,7 +131,7 @@ namespace Sers.CL.Socket.Iocp.Mode.Timer
 
 
                 //(x.3)
-                if (sumCount >= 1_000_000)
+                if (sumCount >= sendBufferSize)
                 {
                     bytes = BufferToBytes(startIndex, curIndex, sumCount);
                     socket.SendAsync(bytes.BytesToArraySegmentByte(), SocketFlags.None);

+ 24 - 3
dotnet/Library/Sers/Sers.CL/Socket/Sers.CL.Socket.Iocp/Mode/Timer/DeliveryServer.cs

@@ -9,6 +9,27 @@ namespace Sers.CL.Socket.Iocp.Mode.Timer
     public class DeliveryServer : DeliveryServer_Base<DeliveryConnection>
     {
 
+        #region NewConnection
+      
+        /// <summary>
+        /// 发送缓冲区数据块的最小大小(单位:byte,默认 1000000)
+        /// </summary>
+        public int sendBufferSize = 1_000_000;
+
+        /// <summary>
+        /// 发送缓冲区个数(默认1024)
+        /// </summary>
+        public int sendBufferCount = 1024;
+        public override DeliveryConnection NewConnection()
+        {
+            var conn = base.NewConnection();
+            conn.SetConfig(sendBufferSize, sendBufferCount);
+            return conn;
+        }
+        #endregion
+
+
+
 
         #region Start Stop
 
@@ -24,7 +45,7 @@ namespace Sers.CL.Socket.Iocp.Mode.Timer
                 }
 
                 //(x.2)               
-                Send_timer.intervalMs = sendInterval;
+                Send_timer.intervalMs = sendFlushInterval;
                 Send_timer.timerCallback = Send_Flush;
                 Send_timer.Start();
 
@@ -64,9 +85,9 @@ namespace Sers.CL.Socket.Iocp.Mode.Timer
 
         #region Send
         /// <summary>
-        /// 单位:毫秒
+        /// 发送缓冲区刷新间隔(单位:毫秒,默认:1)
         /// </summary>
-        public int sendInterval = 1;
+        public int sendFlushInterval = 1;
 
         SersTimer_SingleThread Send_timer = new SersTimer_SingleThread();
 

+ 49 - 9
dotnet/Library/Sers/Sers.CL/Socket/Sers.CL.Socket.Iocp/OrganizeClientBuilder.cs

@@ -17,6 +17,7 @@ namespace Sers.CL.Socket.Iocp
                 securityManager = Sers.Core.Util.StreamSecurity.SecurityManager.BuildSecurityManager(securityConfigs);
             }
             #endregion
+ 
 
 
             string mode = config["mode"]?.ToString();
@@ -27,10 +28,16 @@ namespace Sers.CL.Socket.Iocp
                     {
                         var delivery = new Mode.Simple.DeliveryClient();
 
-                        delivery.host = config["host"].ConvertToString();
-                        delivery.port = config["port"].Convert<int>();
+                        delivery.securityManager = securityManager;
+
+                        delivery.host = config["host"].ConvertToString() ?? delivery.host;
+                        delivery.port = config["port"]?.ConvertBySerialize<int?>() ?? delivery.port;
+
+                        #region 接收缓存区 配置
+                        // 接收缓存区大小(单位:byte,默认:8192)
+                        delivery.receiveBufferSize = config["receiveBufferSize"]?.ConvertBySerialize<int?>() ?? delivery.receiveBufferSize;
+                        #endregion
 
-                        ((Mode.Simple.DeliveryConnection)delivery.conn).securityManager = securityManager;
 
                         organizeList.Add(new OrganizeClient(delivery, config));
                     }
@@ -39,10 +46,27 @@ namespace Sers.CL.Socket.Iocp
                     {
                         var delivery = new Mode.Timer.DeliveryClient();
 
-                        delivery.host = config["host"].ConvertToString();
-                        delivery.port = config["port"].Convert<int>();
+                        delivery.securityManager = securityManager;
+
+                        delivery.host = config["host"].ConvertToString() ?? delivery.host;
+                        delivery.port = config["port"]?.ConvertBySerialize<int?>() ?? delivery.port;
+
+                        #region 接收缓存区 配置
+                        // 接收缓存区大小(单位:byte,默认:8192)
+                        delivery.receiveBufferSize = config["receiveBufferSize"]?.ConvertBySerialize<int?>() ?? delivery.receiveBufferSize;
+                        #endregion
+
+                        #region 发送缓冲区 配置 
+                        // 发送缓冲区刷新间隔(单位:毫秒,默认:1)
+                        delivery.sendFlushInterval = config["sendFlushInterval"].ConvertBySerialize<int?>() ?? delivery.sendFlushInterval;
+
+                        // 发送缓冲区数据块的最小大小(单位:byte,默认 1000000) 
+                        delivery.sendBufferSize = config["sendBufferSize"].ConvertBySerialize<int?>() ?? delivery.sendBufferSize;
+
+                        // 发送缓冲区个数(默认1024)  
+                        delivery.sendBufferCount = config["sendBufferCount"].ConvertBySerialize<int?>() ?? delivery.sendBufferSize;
+                        #endregion
 
-                        ((Mode.Timer.DeliveryConnection)delivery.conn).securityManager = securityManager;
 
                         organizeList.Add(new OrganizeClient(delivery, config));
                     }
@@ -52,10 +76,26 @@ namespace Sers.CL.Socket.Iocp
                     {
                         var delivery = new Mode.SpinWait.DeliveryClient();
 
-                        delivery.host = config["host"].ConvertToString();
-                        delivery.port = config["port"].Convert<int>();
+                        delivery.securityManager = securityManager;
+
+                        delivery.host = config["host"].ConvertToString() ?? delivery.host;
+                        delivery.port = config["port"]?.ConvertBySerialize<int?>() ?? delivery.port;
+
+                        #region 接收缓存区 配置
+                        // 接收缓存区大小(单位:byte,默认:8192)
+                        delivery.receiveBufferSize = config["receiveBufferSize"]?.ConvertBySerialize<int?>() ?? delivery.receiveBufferSize;
+                        #endregion
+
+                        #region 发送缓冲区 配置
+                        // 发送缓冲区刷新间隔(单位:毫秒,默认:1)
+                        delivery.sendFlushInterval = config["sendFlushInterval"].ConvertBySerialize<int?>() ?? delivery.sendFlushInterval;
+
+                        // 发送缓冲区数据块的最小大小(单位:byte,默认 1000000)                     
+                        delivery.sendBufferSize = config["sendBufferSize"].ConvertBySerialize<int?>() ?? delivery.sendBufferSize;
 
-                        ((Mode.Timer.DeliveryConnection)delivery.conn).securityManager = securityManager;
+                        // 发送缓冲区个数(默认1024)  
+                        delivery.sendBufferCount = config["sendBufferCount"].ConvertBySerialize<int?>() ?? delivery.sendBufferSize;                         
+                        #endregion
 
                         organizeList.Add(new OrganizeClient(delivery, config));
                     }

+ 45 - 7
dotnet/Library/Sers/Sers.CL/Socket/Sers.CL.Socket.Iocp/OrganizeServerBuilder.cs

@@ -18,7 +18,7 @@ namespace Sers.CL.Socket.Iocp
                 securityManager = Sers.Core.Util.StreamSecurity.SecurityManager.BuildSecurityManager(securityConfigs);
             }
             #endregion
-
+ 
 
             string mode = config["mode"]?.ToString();
 
@@ -30,8 +30,13 @@ namespace Sers.CL.Socket.Iocp
 
                         delivery.securityManager = securityManager;
 
-                        delivery.host = config["host"].ConvertToString();
-                        delivery.port = config["port"].Convert<int>();
+                        delivery.host = config["host"].ConvertToString() ?? delivery.host;
+                        delivery.port = config["port"]?.ConvertBySerialize<int?>() ?? delivery.port;
+
+                        #region 接收缓存区 配置
+                        // 接收缓存区大小(单位:byte,默认:8192)
+                        delivery.receiveBufferSize = config["receiveBufferSize"]?.ConvertBySerialize<int?>() ?? delivery.receiveBufferSize;
+                        #endregion
 
                         organizeList.Add(new OrganizeServer(delivery, config));
                     }
@@ -43,8 +48,24 @@ namespace Sers.CL.Socket.Iocp
 
                         delivery.securityManager = securityManager;
 
-                        delivery.host = config["host"].ConvertToString();
-                        delivery.port = config["port"].Convert<int>();
+                        delivery.host = config["host"].ConvertToString() ?? delivery.host;
+                        delivery.port = config["port"]?.ConvertBySerialize<int?>() ?? delivery.port;
+
+                        #region 接收缓存区 配置
+                        // 接收缓存区大小(单位:byte,默认:8192)
+                        delivery.receiveBufferSize = config["receiveBufferSize"]?.ConvertBySerialize<int?>() ?? delivery.receiveBufferSize;
+                        #endregion
+
+                        #region 发送缓冲区 配置
+                        // 发送缓冲区刷新间隔(单位:毫秒,默认:1)
+                        delivery.sendFlushInterval = config["sendFlushInterval"].ConvertBySerialize<int?>() ?? delivery.sendFlushInterval;
+
+                        // 发送缓冲区数据块的最小大小(单位:byte,默认 1000000)                     
+                        delivery.sendBufferSize = config["sendBufferSize"].ConvertBySerialize<int?>() ?? delivery.sendBufferSize;
+
+                        // 发送缓冲区个数(默认1024)  
+                        delivery.sendBufferCount = config["sendBufferCount"].ConvertBySerialize<int?>() ?? delivery.sendBufferSize;
+                        #endregion
 
                         organizeList.Add(new OrganizeServer(delivery, config));
                     }
@@ -56,8 +77,25 @@ namespace Sers.CL.Socket.Iocp
 
                         delivery.securityManager = securityManager;
 
-                        delivery.host = config["host"].ConvertToString();
-                        delivery.port = config["port"].Convert<int>();
+                        delivery.host = config["host"].ConvertToString() ?? delivery.host;
+                        delivery.port = config["port"]?.ConvertBySerialize<int?>() ?? delivery.port;
+
+                        #region 接收缓存区 配置
+                        // 接收缓存区大小(单位:byte,默认:8192)
+                        delivery.receiveBufferSize = config["receiveBufferSize"]?.ConvertBySerialize<int?>() ?? delivery.receiveBufferSize;
+                        #endregion
+
+
+                        #region 发送缓冲区 配置
+                        // 发送缓冲区刷新间隔(单位:毫秒,默认:1)
+                        delivery.sendFlushInterval = config["sendFlushInterval"].ConvertBySerialize<int?>() ?? delivery.sendFlushInterval;
+
+                        // 发送缓冲区数据块的最小大小(单位:byte,默认 1000000)                     
+                        delivery.sendBufferSize = config["sendBufferSize"].ConvertBySerialize<int?>() ?? delivery.sendBufferSize;
+
+                        // 发送缓冲区个数(默认1024)  
+                        delivery.sendBufferCount = config["sendBufferCount"].ConvertBySerialize<int?>() ?? delivery.sendBufferSize;
+                        #endregion
 
                         organizeList.Add(new OrganizeServer(delivery, config));
                     }

+ 12 - 1
dotnet/Library/Sers/Sers.CL/Test/CommunicationManage/CmClient/appsettings.json

@@ -51,6 +51,17 @@
           /* 通信模式。可为 "Simple"   "Timer"   "SpinWait"(默认)  */
           //"mode": "Timer",
 
+          /* 接收缓存区大小(单位:byte,默认:8192)  */
+          "receiveBufferSize": 8192,
+
+          /* 发送缓冲区刷新间隔(单位:毫秒,默认:1)(仅当mode为Timer和SpinWait时有效)  */
+          "sendFlushInterval": 1,
+          /* 发送缓冲区数据块的最小大小(单位:byte,默认 1000000)(仅当mode为Timer和SpinWait时有效)  */
+          "sendBufferSize": 1000000,
+          /* 发送缓冲区个数(默认1024)(仅当mode为Timer和SpinWait时有效)    */
+          "sendBufferCount": 1024,
+
+
           /* (x.2) config */
           /* 服务端 host地址。例如: "127.0.0.1"、"sers.cloud" */
           //"host": "192.168.10.11",
@@ -138,7 +149,7 @@
 
   "PressureTest": {
     "clientCount": 1,
-    "requestThreadCount": 10000,
+    "requestThreadCount": 100000,
     "messageThreadCount": 0,
     "msgLen": 1
   }

+ 10 - 0
dotnet/Library/Sers/Sers.CL/Test/CommunicationManage/CmServer/appsettings.json

@@ -48,6 +48,16 @@
           /* 通信模式。可为 "Simple"   "Timer"   "SpinWait"(默认)  */
           //"mode": "Timer",
 
+          /* 接收缓存区大小(单位:byte,默认:8192)  */
+          "receiveBufferSize": 8192,
+
+          /* 发送缓冲区刷新间隔(单位:毫秒,默认:1)(仅当mode为Timer和SpinWait时有效)  */
+          "sendFlushInterval": 1,
+          /* 发送缓冲区数据块的最小大小(单位:byte,默认 1000000)(仅当mode为Timer和SpinWait时有效)  */
+          "sendBufferSize": 1000000,
+          /* 发送缓冲区个数(默认1024)(仅当mode为Timer和SpinWait时有效)    */
+          "sendBufferCount": 1024,
+
           /* (x.2) config */
           /* 服务端 监听地址。若不指定则监听所有网卡。例如: "127.0.0.1"、"sers.cloud"。*/
           //"host": "127.0.0.1",

+ 2 - 0
dotnet/Library/Vit/Vit.Core/Vit.Core/Util/Pool/Extensions/ArraySegmentByteExtensions.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Runtime.CompilerServices;
 using System.Text;
 using Vit.Core.Module.Serialization;
 using Vit.Core.Util.Pool;
@@ -9,6 +10,7 @@ namespace Vit.Extensions
     public static partial class ArraySegmentByteExtensions
     {
 
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public static void ReturnToPool(this ArraySegment<byte> data)
         {
             DataPool.BytesReturn(data.Array);

+ 10 - 0
dotnet/ServiceCenter/App.ServiceCenter/appsettings.json

@@ -69,6 +69,16 @@
           /* 通信模式。可为 "Simple"   "Timer"   "SpinWait"(默认)  */
           //"mode": "Timer",
 
+          /* 接收缓存区大小(单位:byte,默认:8192)  */
+          //"receiveBufferSize": 8192,
+
+          /* 发送缓冲区刷新间隔(单位:毫秒,默认:1)(仅当mode为Timer和SpinWait时有效)  */
+          //"sendFlushInterval": 1,
+          /* 发送缓冲区数据块的最小大小(单位:byte,默认 1000000)(仅当mode为Timer和SpinWait时有效)  */
+          //"sendBufferSize": 1000000,
+          /* 发送缓冲区个数(默认1024)(仅当mode为Timer和SpinWait时有效)    */
+          //"sendBufferCount": 1024,
+
 
           /* (x.2) config */
           /* 服务端 监听地址。若不指定则监听所有网卡。例如: "127.0.0.1"、"sers.cloud"。*/

+ 10 - 0
dotnet/ServiceStation/Demo/SersLoader/Did.SersLoader.Demo/appsettings.json

@@ -74,6 +74,16 @@
           /* 通信模式。可为 "Simple"   "Timer"   "SpinWait"(默认)  */
           //"mode": "Timer",
 
+          /* 接收缓存区大小(单位:byte,默认:8192)  */
+          //"receiveBufferSize": 8192,
+
+          /* 发送缓冲区刷新间隔(单位:毫秒,默认:1)(仅当mode为Timer和SpinWait时有效)  */
+          //"sendFlushInterval": 1,
+          /* 发送缓冲区数据块的最小大小(单位:byte,默认 1000000)(仅当mode为Timer和SpinWait时有效)  */
+          //"sendBufferSize": 1000000,
+          /* 发送缓冲区个数(默认1024)(仅当mode为Timer和SpinWait时有效)    */
+          //"sendBufferCount": 1024,
+
 
           /* (x.2) config */
           /* 服务端 host地址。例如: "127.0.0.1"、"sers.cloud" */