From 403132f49e050644d1c67839de33f621806901e3 Mon Sep 17 00:00:00 2001 From: liuwf Date: Thu, 21 Mar 2024 15:57:13 +0800 Subject: [PATCH] =?UTF-8?q?change-socket=E7=89=88=E6=9C=AC2.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Middlewares/TouchSocketMildd.cs | 1 - Admin.Core.Socket/Admin.Core.Socket.csproj | 7 +- Admin.Core.Socket/ITouchSocketService.cs | 1 - Admin.Core.Socket/Plugins/MyHttpPlug.cs | 117 ------------------ .../MyFixedHeaderCustomDataHandlingAdapter.cs | 28 ----- .../TSocket/MyFixedHeaderRequestInfo.cs | 44 ------- Admin.Core.Socket/TouchSocketService.cs | 37 ++++-- 7 files changed, 28 insertions(+), 207 deletions(-) delete mode 100644 Admin.Core.Socket/Plugins/MyHttpPlug.cs delete mode 100644 Admin.Core.Socket/TSocket/MyFixedHeaderCustomDataHandlingAdapter.cs delete mode 100644 Admin.Core.Socket/TSocket/MyFixedHeaderRequestInfo.cs diff --git a/Admin.Core.Extensions/Middlewares/TouchSocketMildd.cs b/Admin.Core.Extensions/Middlewares/TouchSocketMildd.cs index 23c4d522..e87fb225 100644 --- a/Admin.Core.Extensions/Middlewares/TouchSocketMildd.cs +++ b/Admin.Core.Extensions/Middlewares/TouchSocketMildd.cs @@ -1,6 +1,5 @@ using Admin.Core.Common; using Admin.Core.Socket; -using Admin.Core.Socket.TSocket; using log4net; using Microsoft.AspNetCore.Builder; using System; diff --git a/Admin.Core.Socket/Admin.Core.Socket.csproj b/Admin.Core.Socket/Admin.Core.Socket.csproj index 297335fd..299c5753 100644 --- a/Admin.Core.Socket/Admin.Core.Socket.csproj +++ b/Admin.Core.Socket/Admin.Core.Socket.csproj @@ -9,6 +9,7 @@ + @@ -20,10 +21,4 @@ - - - ..\dll\TouchSocket.dll - - - diff --git a/Admin.Core.Socket/ITouchSocketService.cs b/Admin.Core.Socket/ITouchSocketService.cs index d8b7f5fa..b2ca8a0d 100644 --- a/Admin.Core.Socket/ITouchSocketService.cs +++ b/Admin.Core.Socket/ITouchSocketService.cs @@ -4,7 +4,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using TouchSocket.Http; using TouchSocket.Sockets; namespace Admin.Core.Socket diff --git a/Admin.Core.Socket/Plugins/MyHttpPlug.cs b/Admin.Core.Socket/Plugins/MyHttpPlug.cs deleted file mode 100644 index a961841c..00000000 --- a/Admin.Core.Socket/Plugins/MyHttpPlug.cs +++ /dev/null @@ -1,117 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using TouchSocket.Core; -using TouchSocket.Http; - -namespace Admin.Core.Socket.Plugins -{ - /// - /// 支持GET、Post、Put,Delete,或者其他 - /// - internal class MyHttpPlug : HttpPluginBase - { - protected override void OnGet(HttpSocketClient client, HttpContextEventArgs e) - { - if (e.Context.Request.UrlEquals("/success")) - { - //直接响应文字 - e.Context.Response.FromText("Success").Answer();//直接回应 - Console.WriteLine("处理完毕"); - e.Handled = true; - } - else if (e.Context.Request.UrlEquals("/file")) - { - //直接回应文件。 - e.Context.Response - .SetStatus()//必须要有状态 - .FromFile(@"D:\System\Windows.iso", e.Context.Request); - } - else if (e.Context.Request.UrlEquals("/html")) - { - //回应html - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.AppendLine(""); - stringBuilder.AppendLine(""); - stringBuilder.AppendLine(""); - stringBuilder.AppendLine(""); - stringBuilder.AppendLine("TouchSocket"); - stringBuilder.AppendLine(""); - stringBuilder.AppendLine(""); - stringBuilder.AppendLine("
"); - stringBuilder.AppendLine("王二麻子"); - stringBuilder.AppendLine(""); - stringBuilder.AppendLine(""); - stringBuilder.AppendLine("
"); - stringBuilder.AppendLine(""); - stringBuilder.AppendLine(""); - - e.Context.Response - .SetStatus()//必须要有状态 - .SetContentTypeByExtension(".html") - .SetContent(stringBuilder.ToString()); - e.Context.Response.Answer(); - } - base.OnGet(client, e); - } - - protected override void OnPost(HttpSocketClient client, HttpContextEventArgs e) - { - if (e.Context.Request.UrlEquals("/uploadfile")) - { - try - { - if (e.Context.Request.TryGetContent(out byte[] bodys))//一次性获取请求体 - { - return; - } - - while (true)//当数据太大时,可持续读取 - { - byte[] buffer = new byte[1024 * 64]; - int r = e.Context.Request.Read(buffer, 0, buffer.Length); - if (r == 0) - { - return; - } - - //这里可以一直处理读到的数据。 - } - - //下面逻辑是接收小文件。 - - if (e.Context.Request.ContentLen > 1024 * 1024 * 100)//全部数据体超过100Mb则直接拒绝接收。 - { - e.Context.Response - .SetStatus("403", "数据过大") - .Answer(); - return; - } - //此操作会先接收全部数据,然后再分割数据。 - //所以上传文件不宜过大,不然会内存溢出。 - var multifileCollection = e.Context.Request.GetMultifileCollection(); - - foreach (var item in multifileCollection) - { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.Append($"文件名={item.FileName}\t"); - stringBuilder.Append($"数据长度={item.Length}"); - client.Logger.Info(stringBuilder.ToString()); - } - - e.Context.Response - .SetStatus() - .FromText("Ok") - .Answer(); - } - catch (Exception ex) - { - client.Logger.Exception(ex); - } - } - base.OnPost(client, e); - } - } -} diff --git a/Admin.Core.Socket/TSocket/MyFixedHeaderCustomDataHandlingAdapter.cs b/Admin.Core.Socket/TSocket/MyFixedHeaderCustomDataHandlingAdapter.cs deleted file mode 100644 index d826d169..00000000 --- a/Admin.Core.Socket/TSocket/MyFixedHeaderCustomDataHandlingAdapter.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Admin.Core.Socket.Plugins; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using TouchSocket.Sockets; - -namespace Admin.Core.Socket.TSocket -{ - internal class MyFixedHeaderCustomDataHandlingAdapter : CustomFixedHeaderDataHandlingAdapter - { - public override int HeaderLength => 10; - - protected override MyFixedHeaderRequestInfo GetInstance() - { - try - { - return new MyFixedHeaderRequestInfo(); - } - catch (Exception ex) - { - return new MyFixedHeaderRequestInfo(); - } - } - } - -} diff --git a/Admin.Core.Socket/TSocket/MyFixedHeaderRequestInfo.cs b/Admin.Core.Socket/TSocket/MyFixedHeaderRequestInfo.cs deleted file mode 100644 index 92f76901..00000000 --- a/Admin.Core.Socket/TSocket/MyFixedHeaderRequestInfo.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Admin.Core.Common; -using log4net; -using NPOI.POIFS.Storage; -using NPOI.SS.Formula.Functions; -using Org.BouncyCastle.Tsp; -using Org.BouncyCastle.Utilities.Encoders; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using TouchSocket.Core; -using TouchSocket.Sockets; - -namespace Admin.Core.Socket.TSocket -{ - public class MyFixedHeaderRequestInfo : IFixedHeaderRequestInfo - { - private static readonly log4net.ILog LogInfo = LogManager.GetLogger(typeof(MyFixedHeaderRequestInfo)); - - private int m_bodyLength; - private byte[] m_length = new byte[2]; - private byte[] body; - bool flag = true; - public int BodyLength { get => m_bodyLength; } - /// - /// 自定义属性,标识实际数据 - /// - public byte[] Body { get => body; set => body = value; } - - - public bool OnParsingBody(byte[] body) - { - - return true; - } - - public bool OnParsingHeader(byte[] header) - { - return true; - } - } - -} diff --git a/Admin.Core.Socket/TouchSocketService.cs b/Admin.Core.Socket/TouchSocketService.cs index f57678ad..bc642013 100644 --- a/Admin.Core.Socket/TouchSocketService.cs +++ b/Admin.Core.Socket/TouchSocketService.cs @@ -1,5 +1,5 @@ using Admin.Core.Common; -using Admin.Core.Socket.TSocket; + using log4net; using System.Text; using System.Threading; @@ -50,17 +50,22 @@ namespace Admin.Core.Socket MessageModel messageModel = new MessageModel(); service = new TcpService(); - service.Connecting = (client, e) => { client.Logger.Info($"{client.IP}:{client.Port} 客户端正在连接..."); };//有客户端正在连接 - service.Connected = (client, e) => { client.Logger.Info($"{client.IP}:{client.Port} 客户端连接成功!目前客户端连接数{service.Count}"); };//有客户端成功连接 + service.Connecting = (client, e) => { client.Logger.Info($"{client.IP}:{client.Port} 客户端正在连接..."); + return EasyTask.CompletedTask; + };//有客户端正在连接 + service.Connected = (client, e) => { client.Logger.Info($"{client.IP}:{client.Port} 客户端连接成功!目前客户端连接数{service.Count}"); + return EasyTask.CompletedTask; + };//有客户端成功连接 service.Disconnected += (client, e) => { //有客户端断开连接 client.Logger.Info($"{client.IP}:{client.Port}客户端断开!"); - RefreshStateEvent?.Invoke(client.IP, false); + RefreshStateEvent?.Invoke(client.IP, false); + return EasyTask.CompletedTask; }; - service.Received = (client, byteBlock, requestInfo) => + service.Received = (client, byteBlock) => { try { - var mes = Encoding.UTF8.GetString(byteBlock.Buffer, 0, byteBlock.Len);//注意:数据长度是byteBlock.Len + var mes = Encoding.UTF8.GetString(byteBlock.ByteBlock.Buffer, 0, byteBlock.ByteBlock.Len);//注意:数据长度是byteBlock.Len //心跳包 if (mes== "heartbeat") { @@ -86,12 +91,24 @@ namespace Admin.Core.Socket { client.Logger.Error($"异常:{ex.Message}"); } + return EasyTask.CompletedTask; }; + // service.Setup(new TouchSocketConfig()//载入配置 + //.SetListenIPHosts(new IPHost[] { new IPHost($"0.0.0.0:5000") }) + //.ConfigureContainer(a =>//容器的配置顺序应该在最前面 + //{ + // a.AddConsoleLogger(); + //}) + //.ConfigurePlugins(a => + //{ + // //自定义插件 + //})); + service.Setup(new TouchSocketConfig()//载入配置 - .SetListenIPHosts(new IPHost[] { new IPHost(Appsettings.app("Middleware", "TouchSocket", "Address").ObjToString()) })//可同时监听两个地址 - .SetDataHandlingAdapter(() => { return new NormalDataHandlingAdapter(); })//配置适配器 + .SetListenIPHosts(new IPHost[] { new IPHost($"0.0.0.0:5000") })//可同时监听两个地址 + // .SetDataHandlingAdapter(() => { return new NormalDataHandlingAdapter(); })//配置适配器 .SetMaxCount(10000) //.SetThreadCount(1000) //.SetCacheTimeoutEnable(false) @@ -102,8 +119,8 @@ namespace Admin.Core.Socket .ConfigurePlugins(a => { a.UseCheckClear(); - })) - .Start();//启动 + })); + service.Start();//启动 service.Logger.Info("服务器成功启动"); messageModel.success = true;