历史更新
TouchSocket
框架升级/发版规则升级前重点关注可能造成破坏性的标签类型:、、、
版本号规则:主版本号.次版本号.修订版本号
- 只要确认为框架
bug
,则当天修复,下个周日发版,修订版本号加 1
。 - 其余情况,每年发布一个
主版本
,发布时间跟随Dotnet的发布时间。
v3.0.26
更新日期: 2025.4.20
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Rpc
-
RpcActionFilterAttribute
在RpcImplementation
程序集中使用时无效bug。 #IC0IB0
TouchSocket.Http
-
WebSocket
服务端WebSocket
使用AsyncClose()
主动关闭连接时引发NullReferenceException
异常。 #IC1FZ8
v3.0
v3.0.25
更新日期: 2025.4.12
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.SerialPort
- 接收数据时,如果业务出现延迟,则会导致接收失败的异常bug。 #IBZHN2
v3.0.21(3)(4)
更新日期: 2025.4.6
更新描述:
兼容性修复升级。http组件性能优化。
更新详情:
TouchSocket.Core
-
ReadOnlySpan<byte>
的Trim
方法。 -
Method
新增支持类型的直接构造函数方法。 -
AsyncResetEvent
新增已释放判断。 -
DynamicMethod
在ref、out等参数时,无法使用源生成调用的bug。 -
FlowOperator
的在构造函数使用最大值初始化MaxSpeed
。
TouchSocket.Sockets
-
TcpCore
在特点情况下不释放资源的bug。PR -
ShutdownAsync
调整返回值,由Task
改为Task<Result>
。
TouchSocket.Http
-
HttpContent
新增TryComputeLength
的抽象方法。 -
HttpResponse
的FromFileAsync
扩展新增传输限速、进度功能。#IBYGC7 - 整个
Http
组件性能优化。 -
HttpHeaders
由枚举改为静态类。(此操作不影响现有代码)
v3.0.20
更新日期: 2025.3.30
更新描述:
兼容性修复升级。部分方法名大小写调整。
更新详情:
TouchSocket.Core
-
TouchSocketCoreUtility
类中的所有静态字段大小写调整。 -
StringExtension
类中的多个方法名大小写调整(此处调用时可能是扩展方法调用的,所以需要注意)。
TouchSocket.Http
-
HttpClient
在请求application/x-www-form-urlencoded
时,内部未进行编码的bug。#IBVPAD -
HttpResponse
新增FromHtml
扩展方法,用于直接返回Html
页面。
TouchSocket.Rpc
-
IRpcCallContextAccessor
服务,可以在异步调用流中,通过服务直接获取到执行Rpc
的CallContext
。
TouchSocket.WebApi.Swagger
-
Swagger
页面版本为v5.20.2
,以支持一键复制url等功能。 #IBX933
TouchSocket.Modbus
-
Modbus rtu
在响应数据时的严谨性,基本排除了站号,功能码不一致时仍然返回的错误情况。 #github-issue 54
v3.0.19
更新日期: 2025.3.23
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Http
- Http静态内容插件在客户端不支持gzip时仍然会使用gzip的bug。
- Http静态内容插件在以文件响应时,限速为0的bug。#IBVCPJ
v3.0.18
更新日期: 2025.3.16
更新描述:
兼容性修复升级。少量代码调整,详见
更新详情:
TouchSocket.Sockets
-
TryShutdown
的关闭机制没有考虑异步发送队列的情况。#IBTKMP -
TryShutdown
方法改为ShutdownAsync
。
TouchSocket.Http
v3.0.17
更新日期: 2025.3.12
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Sockets
- UdpSessionBase的OnUdpReceiving方法添加EndPoint参数。#IBSQVN
TouchSocket.SerialPorts
- SerialPortClient在接收数据时LastReceivedTime一直不会更新。#IBSXDK
v3.0.16
更新日期: 2025.3.9
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Core
- 自定义适配器在接收数据时,不验证
MaxPackageSize
的bug
。 -
MakeIdentifier
在获取方法名称时,不显示中文等其他字符的bug
#IBQQHY。
TouchSocket.Sockets
- 当配置
NoDelay
时,TcpCore
发送时仍然会把数据放入发送队列,可能会产生细微延迟 #IBR1I2。 -
IWaitingClient
实现了无效的Dispose
方法,目前已取消。
v3.0.15
更新日期: 2025.3.2
更新描述:
兼容性修复升级。
更新详情:
All
- 代码规范和相关注释。
TouchSocket.Core
-
SystemExtension
新增ReadAllToByteArray
方法。
v3.0.14
更新日期: 2025.2.15
更新描述:
修复升级。区间字符适配器会有不兼容部分,请参阅区间字符。
更新详情:
All
- 所有的
Plugin
接口。均新增快捷扩展方法,简化使用。 - 使用自定义的
lock
锁对象。以简化使用场景。
TouchSocket.Core
-
ILog
接口新增DateTimeFormat
属性。 #IBLQBX - 自定义区间适配器在未找到开始字符的情况下,也会缓存数据的bug。 #IBKPXU
- 自定义区间适配器的运行逻辑,简化使用方式。 #IBKPXU
TouchSocket.Rpc
-
IRpcActionFilter.ExecutedAsync
在执行异常时,Exception
参数一直为空的bug。#IBK579
TouchSocket.Dmtp
-
TokenVerifyException
异常信息中新增Metadata属性。 -
TcpDmtpService
中使用e.IsPermitOperation = false;
拒绝客户端无效的bug。#IBKO6A
v3.0.13
更新日期: 2025.1.27
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Core
- 在
net framework
下,如果Span<byte>
为空时,ToString
会异常的bug
。 #IBIYRQ
v3.0.12
更新日期: 2025.1.19
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Core
-
FileLogger
的路径合并方式。
v3.0.11
更新日期: 2025.1.12
更新描述:
兼容性修复升级。
更新详情:
All
- 全系新增
EasyTask.ContinueOnCapturedContext
的设定,以解决Unity3d
在webgl
平台下,会卡住的问题。
TouchSocket.Core
-
IWaitHandlePool<T>
的接口抽象。
TouchSocket.Http
-
HttpResponse
新增SetRedirect
重定向功能。#IBG1QT -
HttpRequest
在请求时的编码效率。 -
HttpRequest
不会对中文等非Ascii
编码的字符进行url encode
的bug
。#IBGATN - 在客户端,执行
IWebApiRequestPlugin
插件时,HttpRequest
无法通过GetContent
或者GetBody
获取数据。#IBGARB
v3.0.10
更新日期: 2025.1.5
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Core
-
AsyncBoundedQueue
新增Capacity
、Count
等属性。 -
CustomJsonDataHandlingAdapter
自定义适配器,方便自定义继承实现。 -
CustomCountSpliterDataHandlingAdapter
固定数量分隔符适配器。#IBF0Z7 -
IByteBlock
新增ReadT
和WriteT
方法。
TouchSocket.Sockets
-
CheckClearPlugin
在客户端断开后,仍然会触发断开的bug。#IBECPA
v3.0.9
更新日期: 2024.12.22
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Core
-
SystemTextJsonStringToClassSerializerFormatter
转换器。 -
IPackage
源生成时,默认支持Guid
。#IBC1FH
TouchSocket.Sockets
TouchSocket.SerialPort
-
SerialPortClient
串口组件ProtectedMainSerialPort
属性null
错误。#IBBQ4A
TouchSocket.AspNetCore
-
IWebSocketDmtpService
接口中缺少Clients
属性。#IBBQS5
TouchSocket.Modbus
-
ModbusRtu
在crc
校验失败时,会抛出ResponseMemoryVerificationError = 99
的错误码。#IBC1J2
TouchSocket.WebApi
-
WebApi
支持Put
、Delete
、Options
请求方式。 -
WebApi
当参数解析异常时,RpcActionFilterAttribute
无法捕获。#IBCI94 -
WebApiParserPlugin
使用Mapping
代替GetRouteMap
和PostRouteMap
。
TouchSocket.JsonRpc
-
JsonRpc
支持Aot
。
v3.0.8
更新日期: 2024.12.15
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Sockets
-
IPHost
类,在Mono
运行时会异常的bug。 #IBAG51 -
UdpSessionBase
类调整ReceivingData
为OnUdpReceiving
。 -
Udp
组件,新增IUdpReceivingPlugin
插件。#IBB1F6
TouchSocket.AspNetCore
- 当使用基于
WebSocket
协议,搭建DmtpServer
服务时 使用app.UseOutputCache()
缓存中间件导致连接失败后,重连无响应。#IBAPTQ
TouchSocket.Dmtp
-
DmtpActor
类,在连接成功时,Handshaking
事件参数e.Message
无法传回到请求端。
TouchSocket.SerialPorts
-
SerialPortClient
类,在关闭或者释放时,资源无法释放的bug。 #IBB8FD
v3.0.7
更新日期: 2024.12.8
更新描述:
兼容性修复升级。在.Net9.0中,启用Lock锁代替object锁,提高锁效率。
更新详情:
TouchSocket.Core
-
ValueByteBlock
类,在WritePackage
时数据无效的bug。 - 开放
PackageFastBinaryConverter
类,以支持二进制数据序列化源生成。
TouchSocket.Dmtp
-
DmtpRpc
新增RpcDispatcher
调度器,支持多线程并发,或者单线程调度。 -
DefaultSerializationSelector
优化支持System.Text.Json
源生成模式的序列化。 - 触发
OnFileTransferred
事件的时机调到SendAsync
前面,目的是保证调用方在收到回复时,响应方已经完成事件处理。此操作理论上不会对现有运行逻辑造成影响。 -
DmtpRpc
在发送Rpc
请求时,如果请求模式使用OnlySend
、或者WaitSend
,则会抛出异常的bug。#IB9F8P
TouchSocket.Modbus
- 在
IModbusResponse
返回响应时,会同时携带返回响应的当前请求IModbusRequest
。
TouchSocket.WebApi
-
WebApiSerializerConverter
类,以支持更好的System.Text.Json
源生成模式的序列化。
TouchSocket.Rpc
- 在
ReenterableAttribute
特性,可以强制设置Rpc
函数是否为重入模式。 -
ConcurrencyRpcDispatcher
并发调度器,支持多线程并发。 -
ImmediateRpcDispatcher
当前调度器,直接在当前线程执行。 -
QueueRpcDispatcher
队列调度器,把所有请求,放在一个队列中,等待处理。
v3.0.5(6)
更新日期: 2024.12.1
更新描述:
兼容性修复升级。全面支持PluginManager
容器化模块和Scoped
区域划分。
此修改不影响现有运行逻辑。但是如果是Asp.Net Core项目,则可能会影响
Scoped
服务运行结果。
更新详情:
TouchSocket.Core
-
FlowOperator
类。以实现流量速度限制。 -
PluginManager
类。新增FromIoc
的设定,支持插件容器化。 -
Result
类。使用record
修饰,简化使用逻辑。 -
IResolver
的Resolve
行为。当服务未注册时,会返回null
。不会再触发异常。 -
SetupConfigObject
在Build时,会创建一个新的Scoped生命周期的容器。这个在现有架构下,不会影响运行结果。 -
Metadata
在添加相同键值时,会异常的bug,正确操作应该是覆盖旧值。 -
IResolver
移除对IRegistered
接口的实现,所以无法再使用IResolver
判断某个服务是否已注册。 -
IResolver
移除对TryResolve
扩展方法实现,请使用Resolve
直接代替。
TouchSocket.Sockets
TouchSocket.Http
-
HttpBase
新增ReadCopyToAsync(Stream stream, HttpFlowOperator flowOperator)
方法。支持传输进度、速度显示。#IB7GIC -
HttpFlowOperator
类,支持Http上传、下载文件(流)时,可以方便的实现限速、传输进度、速度显示等。 -
StreamHttpContent
在传输流数据时,支持HttpFlowOperator
相关操作。
TouchSocket.Rpc
-
Rpc
代码生成器在生成通用泛型类型时,会失败的bug。#IB7IB2
v3.0.4
更新日期: 2024.11.24
更新描述:
修复升级。WebSocket有少量代码差异,下面会详细介绍。
更新详情:
TouchSocket.Core
-
JsonPackageAdapter
适配器,专门解决纯Json数据格式的粘分包。详情参见:JsonPackageAdapter。 -
IByteBlock
新增WriteNormalString
方法,用于写入普通字符串。 -
Container
容器新增Scoped生命周期,但是本身容器并未实现功能,如果需使用,请使用TouchSocket.Core.DependencyInjection。 -
Tcp、NamedPipe、SerialPort、DmtpRpc、JsonRpc、WebApi
等所有组件,支持Scoped容器。(需配合TouchSocket.Core.DependencyInjection容器)。
TouchSocket.Http
-
HttpStaticPagePlugin
新增SetContentTypeProvider(Action<IContentTypeProvider> provider)
方法。 -
WebSocket
新增CloseAsync(WebSocketCloseStatus closeStatus, string statusDescription)
方法。 -
WebSocket
在Close
时,不符合规范的bug。#IAAF3U,#IB5IH0 -
IWebSocketClosingPlugin
的事件参数,由ClosedEventArgs
调整为ClosingEventArgs
。 重新实现接口解决
TouchSocket.Sockets
-
TcpClient
在重连之后,适配器失效的bug。 #IB6KZJ
TouchSocket.Rpc
-
Rpc
服务新增IScopedRpcServer
。
TouchSocket.SerialPort
-
SerialPortClient
在重连之后,适配器失效的bug。
TouchSocket.NamedPipe
-
INamedPipeSession
新增DataHandlingAdapter
属性。 -
NamedPipeClient
在重连之后,适配器失效的bug。
TouchSocket.Modbus
-
Modbus
在写入时,会携带IModbusResponse
的返回值。 #IATPWB
v3.0.3
更新日期: 2024.11.17
更新描述:
兼容性修复升级。
更新详情:
-
WaitingClient
在收到ResponsedData
数据时,优先建议使用ByteBlock
,在高效场景中代替原Data
属性。
v3.0.2
更新日期: 2024.11.15
更新描述:
兼容性修复升级。
更新详情:
- 串口的发送与接收无法通过插件获取到原始数据。#IB4NF4
v3.0.0(1)
更新日期: 2024.11.13
更新描述:
大版本升级,有部分不兼容性升级。所以请在升级前做好备份,同时在升级之后,请务必阅读v3.0升级指南。
本次改动在运行时完全兼容v2.1
,所以客户端和服务器可以差异版本更新。
更新详情:
SDK
- 新增
net9.0
支持。 - 移除
net7.0
支持,但是不影响net7.0
使用,因为最低到net6.0
的支持。
TouchSocket.Core
-
Plugin
组件默认支持AOT
,不再借助委托实现。 -
AppMessenger
组件默认支持AOT
。 -
DependencyObject
类使用“懒汉式”加载内部成员,减少内存使 用。 -
PluginManager
支持在运行时移除插件。 -
Method
类,在方法、或类添加[DynamicMethod]
特性时,默认支持AOT
,为动态调用提供极大方便。
TouchSocket.Core.DependencyInjection
-
AspNetCoreContainer
不支持KeysService
的bug。
TouchSocket.Sockets
-
IReceiver
在启用缓存模式时,如果已经完成接收,则会抛出异常的bug。 #IB44LL
TouchSocket.Http
-
HttpRequest
在请求时,不用传参,直接使用默认构造函数即可。 -
GetMultifileCollection
相关扩展方法,使用GetFormCollectionAsync
代替。
TouchSocket.Rpc
-
ICallContext
继承IDependencyObject
,支持扩展属性读写,可以更方便的开发。 -
Rpc
特性取消构造函数入参,使用属性设置。受影响的有:DmtpRpc
、JsonRpc
、XmlRpc
、WebApi
。
TouchSocket.Dmtp
-
DmtpRpc
在Avalonia-Web
工作时,连接时间超长的bug。 -
IWebSocketDmtpClient
不实现IDmtpClient
的bug。 -
DmtpHeartbeatPlugin
在长时间运行时,可能会失效的bug。 -
[DmtpRpc]
特性不再允许继承,所有设置也是通过属性设置。
TouchSocket.JsonRpc
-
[JsonRpc]
特性不再允许继承,所有设置也是通过属性设置。
TouchSocket.WebApi
-
[FromBody]
特性,支持指定参数来源自Http的请求Body。 -
[FromForm]
特性,支持指定参数来源自Http的请求Form表单。 -
[FromHeader]
特性,支持指定参数来源自Http的请求Header。 -
[FromQuery]
特性,支持指定参数来源自Http的请求Query。 -
[WebApi]
特性不再允许继承,所有设置也是通过属性设置。 - WebApi的请求方式,目前全部使用
WebApiRequest
类来表示全部入参,一般如果使用代理,或者源生成的话,只需要重新生成即可。 -
HttpMethodType.GET
枚举,使用HttpMethodType.Get
代替。 -
HttpMethodType.POST
枚举,使用HttpMethodType.Post
代替。
TouchSocket.XmlRpc
-
[XmlRpc]
特性不再允许继承,所有设置也是通过属性设置。
v2.1
v2.1.10
更新日期: 2024.10.25
更新描述:
兼容性修复升级。
更新详情:
-
CheckClearPlugin
插件频繁输出poll日志的不合理设计。
v2.1.9
更新日期: 2024.10.14
更新描述:
兼容性修复升级。
更新详情:
- CheckClearPlugin长时间工作时可能失效的bug。
v2.1.8
更新日期: 2024.10.11
更新描述:
兼容性修复升级。
更新详情:
- TcpService在Stop的时候,有个内部异常打了log。 #IAWD4N
v2.1.7
更新日期: 2024.10.5
更新描述:
兼容性修复升级。
更新详情:
- TcpService在启动时如果异常,则无法再重新启动的bug。
v2.1.6
更新日期: 2024.10.1
更新描述:
兼容性修复升级。
更新详情:
- HttpContent机制,能上传超大数据。
- StreamHttpContent,能上传流数据,例如:文件流。
- Task内部异常时没有及时try,导致全局捕获时有无用捕获。
- TcpServiceBase在调用StopAsync时,IServerStopedPlugin插件无法触发的bug。
- TriggerQueue无用类。
- HttpRequest,使其能上传超大数据。
v2.1.4(5)
更新日期: 2024.9.23
更新描述:
兼容性修复升级。
更新详情:
- DmtpRpc恢复性新增Xml序列化。
- 使用源生成(IPackage)打包时报错。#IASTWJ
- Result泛型类中隐式转换错写成显示转换的bug。
- DmtpRpc序列化选择器没有预留Json序列化配置的bug。
v2.1.3
更新日期: 2024.9.22
更新描述:
兼容性修复升级。
更新详情:
- 部分类,方法注释。
- 多数英文字符串资源。
- Tcp、NamedPipe、SerialPort等组件在主动调用Close时,ClosedEventArgs参数属性Manual为false的bug,导致重连插件偶发性再次连接。#IASH1A
-
ByteBlock
类部分bug。 -
DecimalConver
类,该类功能已完全由TouchSocketBitConverter
代替,属于无用类。 - 受保护方法
ProtectedResetId
方法,名称更改为ProtectedResetIdAsync
。
v2.1.2
更新日期: 2024.9.19
更新描述:
兼容性修复升级。
更新详情:
- 部分类,方法注释。
- TcpClient在释放时,重连插件会无限连接的bug,该bug会导致CPU占用过高。#IAS9NG
v2.1.1
更新日期: 2024.9.18
更新描述:
兼容性修复升级。
更新详情:
- 在
MemoryCache
中实现新的TryGetValue
方法。 - 密封
CacheEntry
类并优化缓存管理逻辑。 - 扩展
PackageExtensions
类,增加泛型方法以提高可读性和可重用性。 - 优化
HttpStaticPagePlugin
构造函数和StaticPageOptions
类以简化静态页面配置。 - 在
FastBinaryFormatter
中改进序列化逻辑,特别是对于多维数组的处理。 #IARKE1 - 在
IPackage
中改进打包、解包逻辑,特别是对于多维数组的处理。
v2.1.0
更新日期: 2024.9.15
更新描述:
大版本升级,有部分不兼容性升级。所以请在升级前做好备份,同时在升级之后,请务必阅读v2.1升级指南。
更新亮点:
本次更新,主要有以下亮点:
- 全系支持Span、ValueTask、Memory、Unsafe等依赖。大幅提升并发性能与低GC能力。
- 全系组件,尽量多的提供了异步Api,大幅度提升并发能力。
- 重构fast序列化,Package包模式、Http、WebSocket等组件,使之更加易用。
- 资源国际化。本次更新会在内部使用中英双语信息提示,这在日志记录,堆栈跟踪等场景更加符合区域化。
- 增加完整注释。基本上能达到95%的代码注释率。
更新详情:
TouchSokcet.Core
- TouchSocketBitConverter新增To、UnsafeTo、WriteBytes、UnsafeWriteBytes等可以直接操作Span。
- Crc类新增Span相关转换。
- CustomDataHandlingAdapter新增
bool TryParseRequest(ref TByteBlock byteBlock, out TRequest request)
方法,可以同步完成适配器数据解析。 - SingleStreamDataAdapterTester泛型测试器,可以对TryParseRequest进行完整性测试。
- IPackage源生成器新增自定义PackageMember特性,用来定义打包的顺序和自定义转换器。
- SetupConfigObject的SetupAsync。
- CustomDataHandlingAdapter支持结构体作为泛型类型。
- Fast序列化支持自定义FastSerializerContext,这可以极大的利用源生成来决定序列化和反序列化。
- 分离MemoryCache的同步和异步接口。
- ByteBlock取消Stream的继承,如果需要使用Stream,可以使用ByteBlock.AsStream()。
- Gzip类调整ByteBlock参数为Stream。
- CustomDataHandlingAdapter解析的数据,均会以ReadonlySpan的形式投递。
- IPackage接口,使之既可以在ByteBlock工作,也可以在ValueByteBlock工作。
- PluginManager使用接口作为唯一键,规定一个接口中有且仅有一个方法。
- ByteBlock、ValueByteBlock均继承IByteBlock接口规范。
- ByteBlock、ValueByteBlock移除Buffer属性,如果想获取有效数据,可以通过Memory、Span等获取,如果想获取容量可以使用TotalMemory属性。
TouchSokcet.Sockets
- Tcp、Udp组件,默认情况下适配器将为null,并且可以正常工作。
- SocketClient、ISocketClient等服务器辅助类,改名为TcpSessionClient和ITcpSessionClient。
v2.0
v2.0.18
更新日期: 2024.9.10
更新描述:
兼容性修复升级。
更新详情:
- 当Cancel延迟到Reset之后时,新获取的waitData会出现Status为Cancel异常bug #IAQ2AI。
v2.0.17
更新日期: 2024.8.30
更新描述:
兼容性修复升级。
更新详情:
- 使用AspNetCore容器时,默认没有注册ILog的bug。
v2.0.16
更新日期: 2024.8.19
更新描述:
兼容性修复升级。
更新详情:
- tcp在winform中会使用主线程接收的bug,导致各种同步接收异常。
v2.0.15
更新日期: 2024.8.9
更新描述:
兼容性修复升级。
更新详情:
- 当客户端断开连接时,http响应会出现object is null的bug提示。
v2.0.13(14)
更新日期: 2024.7.24
更新描述:
兼容性修复升级。
更新详情:
- 重连插件在长时间运行时,会失效的bug。
- ssl加密下,连接响应时间过长bug#IAET6V 。
v2.0.12
更新日期: 2024.7.17
更新描述:
兼容性修复升级。
更新详情:
- socket在接收连接时,异常无法拦截的bug#IADIGX。
- 日志记录在执行时,先判断日志组件的可用性。
v2.0.11
更新日期: 2024.7.12
更新描述:
兼容性修复升级。
更新详情:
- Metadata在Add时不会覆盖原key的bug。
v2.0.10
更新日期: 2024.5.31
更新描述:
兼容性修复升级。
更新详情:
- WebSocket快捷命令行bug。 #I9TG3V。
v2.0.9
更新日期: 2024.5.29
更新描述:
兼容性修复升级。
更新详情:
v2.0.(7)8
更新日期: 2024.5.17
更新描述:
兼容性修复升级。
更新详情:
- udp首次建立连接无法接收数据的bug。 #I9PV7C。
v2.0.6
更新日期: 2024.5.12
更新描述:
兼容性修复升级。
更新详情:
- FlowGate的waitTime小于0时bug。
v2.0.5
更新日期: 2024.5.2
更新描述:
兼容性修复升级。
更新详情:
- wsclient Received事件与插件触发bug。#I9L9WI。
- ws命令行执行bug。
v2.0.4
更新日期: 2024.4.30
更新描述:
兼容性修复升级。
更新详情:
v2.0.3
更新日期: 2024.4.14
更新描述:
兼容性修复升级。
更新详情:
- Tcp在接收时,内存池释放存在延迟,可能导致内存池快速扩张,浪费内存。#I9FVAA。
- 在使用Host模型时,注入瞬态的TcpClient,在第一次获取实例是正常的,第二次就失败。#I9G3SV。
- WebSocketClient连接其他服务器时显示 “操作已被取消”。#I9GG05。
- ConcurrentList新增实现IReadOnlyList接口。
v2.0.2
更新日期: 2024.4.1
更新描述:
兼容性修复升级。
更新详情:
- TouchSocketBitConverter中的ToBooleans方法存在Bug#I9C1UY。
- SystemExtensions中的GetBit和SetBit方法#I9C1WM。
- HttpService多次响应下载文件时,不会响应的bug。
v2.0.1
更新日期: 2024.3.16
更新描述:
兼容性修复升级。
更新详情:
- HttpClient,无法通过HttpResponse.GetBody()获取响应内容#I989SI。
- SetNoDelay 异常#I979B0。
- 调用Dmtp服务的大数据传输时,如果循环调用会出现收到的数据和发送的数据不一致。实际上该问题是由
ByteBlock
写入扩容bug而导致的#I96FNF。
v2.0.0
更新日期: 2024.3.9
更新描述:
此版本是大版本更新。可能会产生很多不兼容部分,所以升级之前请做好备份,并且请详细阅读下列更新内容。
升级指南:
- 升级时请先升级至
2.0.0-beta.190
,再升级至2.0.0-rc.2
版本,因为正式版对于[Obsolete]特性的成员直接删除了,所以为友好升级,请先升级至此版本。 - 由2.0.0-beta.200至2.0.0-beta.220 #I8DE1D
- 由2.0.0-beta.220至2.0.0-beta.230 #I8LAX4
更新详情:
TouchSokcet.Core
- FileLogger支持指定不同目录。
- 所有自定义插件必须在自身内,主动调用e.InvokeNext()时,才会调用下一个插件。不然会中断插件传递。同时e.Handled功能依然有效。
- Log项。LogType调整为LogLevel,并且不需要位运算。直接按日志等级输出。
- 修改IPluginsManager名称为IPluginsManager。
- DependencyProperty中,移除对类型的定义。
- 所有组件的基础插件,强制用户插件必须继承PluginBase,然后实现需要的接口。
- BytePool在创建ByteBlock时,移除EqualSize的设定,因为这会影响内存池的效率。
- 修改所有委托为异步Task。
- 修改所有Setup返回值为void。
- Metadata在0个成员长度时,会被反序列化成null的bug。
- PluginsManager在注册具有继承的插件时,会无法识别的bug。
TouchSokcet.Sokcets
- IPHost支持从int、string直接隐式转换。
- TouchSocket所有“ID”属性,改名为“Id”。
- TouchSocket所有插件的执行顺序,移动至内部重写方法之后。
- TouchSocket所有
ResetID
改名为ResetId
。 - UseCheckClear项,SetDuration调整名称为SetTick。
- UseCheckClear项,不仅可以适用服务器,客户端也适用。
- Config配置中,SetDataHandlingAdapter调整为SetTcpDataHandlingAdapter。
- 适配器项,CustomDataHandlingAdapter中的Filter方法中,byteBlock参数使用in修饰。
- 适配器项,DataHandlingAdapter改名为TcpDataHandlingAdapter。
- 适配器项,DataAdapterTester改名为TcpDataAdapterTester。
- Config项,所有适配器的相关配置,使用SetAdapterOption配置。
- UsePlugin的显式配置,当调用ConfigurePlugins时,会自动启用。
TouchSokcet.Http
- WSCommandLinePlugin改名为WebSocketCommandLinePlugin。
- WebSocket添加同步非阻塞Read。
- WebSocket的WSDataFrame新增IsPing、IsPong、IsText、IsBinary、IsClose等属性。
- 静态网页插件新增NavigateAction与ResponseAction等委托,可以在静态页面请求之前重定向,或者请求返回时设置header等。
TouchSokcet.Rpc
- 整体功能迁移至TouchSokcet(Pro).Dmtp。
- RpcActionFilter执行策略和顺序
- 修改ConfigureRpcStore为AddRpcStore。
- RealityProxy透明代理方式。
- DispatchProxy添加OnBefore和OnAfter的AOP调用。
TouchSokcet(Pro).Dmtp
- 原TouchRpc全系改名为Dmtp。例如:原TcpTouchRpcClient改名为TcpDmtpClient。
- 原TouchRpc中InvokeOption,改名为DmtpInvokeOption。InvokeOption依然有效,但是在调用DmtpRpc时,则无法指定序列化方式。所以可能需要使用DmtpInvokeOption。
- 原TouchRpc中Invoke直接调用的方式,改为InvokeT。
- Dmtp相关配置,使用SetDmtpOption配置。
- 暂时移除EventBus功能,后续可能考虑添加。
- ws协议的TouchRpc服务端,增加HttpContext上下文获取。
- 文件传输项,开放增加SetMaxSpeed功能。
- DmtpRpc。
- DmtpRpc组件在调用时,可以通过DmtpInvokeOption传入Metadata元数据。
- DmtpRpc在调用无ref,out的函数时,参数会为null的bug。
TouchSokcet.JsonRpc
- JsonRpc使用内联数组调用#I79OFZ。
- Rpc服务使用调用上下文时不需要再添加
IncludeCallContext
。
TouchSokcet.WebApi
- WebApi新增Swagger页面。
- Rpc服务使用调用上下文时不需要再添加
IncludeCallContext
。
TouchSokcet.XmlRpc
- Rpc服务使用调用上下文时不需要再添加
IncludeCallContext
。
TouchSokcet(Pro).Hosting
- 新发布Hosting的包,用于构建更加强壮的运行程序。
TouchSokcet.SerialPorts
- 新发 布串口的包。
TouchSokcet(Pro).Modbus
- 新发布Modbus的包,支持Tcp、Udp、Rtu、RtuOverTcp、RtuOverUdp协议的主站(Poll)和从站(Slave)。
v1.3
v1.3
更新日期:2023.3.1
更新描述:兼容性更新。
- 整体增加异步方法。
- Rpc源代码生成策略,支持接口实例并存。
- TcpClient在UseReconnect插件时,Disconnect事件不触发bug。
- ws协议的TouchRpc服务端,增加HttpContext上下文获取。
v1.2
v1.2
更新日期:2023.2.15
更新描述:兼容性更新。
- TouchRpc支持命名元组。
- Rpc源代码生成策略。
- TouchRpc在Websocket协议下,启动,连接异常bug。
- TouchRpc在调用WaitSend下失败的bug。
- TouchRpc在Handshaked时,调用Rpc超时bug。
- 序列化、反射在unity中使用il2cpp编译的bug。
- 反序列化在初次加载时会失败的bug。
- BytePool没有公共构造函数的bug。
- ws协议的TouchRpc服务端,增加HttpContext上下文获取。
- ByteBlock对于int,long等数据,写入和读取的时候支持大小端指定。
- IServicePlugin插件,用于显示通知服务器的启动状态。
- Rpc支持接口特性标记。
- 将BytePool由静态调整为实例,且由其Default实例作为默认。
v1.1
v1.1
更新日期:2023.1.13
更新描述:小版本升级,可能会有不兼容。请按下列提示修改。
- TouchRpc系文件传输时,文件夹不存在的提示。
- WaitingClient,当客户端断开连接时,可选是否抛出异常。
- Fast序列化时。可选序列化只读属性。
- 多个不稳定Bug。
- Tcp客户端新增Disconnecting事件。在主动Close时生效。
- 多个事件类名称修改,请按照提示修改即可。
- 多个无用方法参数。
v1.0
v1.0.0
更新日期:2023.1.1
更新描述:大版本升级,请详细阅读下列更新日志。
- 将最高版本升级为NET7。
- Tcp系异步发送效率。
- TouchRpc系Channel的稳健性。
- 多个不稳定Bug。
- ValueByteBlock,在简单代码块里面能有效减少创建的类。
- MemoryCache类,其功能类似微软官方。但是支持全部泛型。
- IPackage系。该系列能以超高效率的进行二进制序列化。
- SingleTimer类,不可重入的Timer。
- Jsonrpc支持自定义适配器解析(EE)
- 严重TouchRpc系OnRouting通知,所有的客户端之间的通信,都必须经过OnRouting的筛查。
- TouchRpc系小文件传输,在文件小于1Mb时,其传输效率是常规传输的10倍以上。
- TouchRpc系超大文件多链路传输,支持多个客户端协同传输同一个文件,这在互联网环境中,效率比常规传输提高类3-5倍。
- TouchRpc系Redis组件,能实现双端共同存储。
- 严重精简所有命名空间,删除所有三级命名空间。例如:TouchSocket.Core.ByteManager精简为TouchSocket.Core。
- 严重删除Newtonsoft.Json的源代码嵌入。全局的Json会根据环境动态调整,详情见Json工具
- 严重框架默认日志由ConsoleLogger,替换为EmptyLogger(不输出任何东西)。
- 严重Tcp全系,在连接时,ID的初始值使用long类型从0递增。
- 严重Tcp服务器,将定时清理无数据交互的选项替换为UseCheckClear插件。并且默认没有启用,需要手动加入。
- Tcp系适配器,取消部分参数。
- DataLock改名为DataSecurity。
- EasyAction改名EasyTask。
- IMessage改名IMessageObject。
- TokenInstance改名MessageInstance。
- TouchRpc系,精简常规文件传输操作。
- 严重TouchRpc系,所有插件通知参数,默认都设为不允许操作,需要手动设置e.IsPermitOperation=true。
- Newtonsoft.Json的源代码嵌入。全局的Json会根据环境动态调整,详情见Json工具。
*** 更新示例指南 ***
(1)适配器参数报错:直接删除isAsync参数,以及isAsync为True的所有逻辑。
(2)依赖属性的声明报错:增加泛型约束即可,详情查看依赖属性
(3)服务端定时清理警告:在配置插件中使用UseCheckClear,并且进行相关配置。
v0
版本号: 0.7.0
更新日期:2022.9.21 更新描述:兼容性更新,增强型更新。RPC内容需要客户端与服务器同步更新。 更新详情:
优化
- Fast二进制序列化,支持自定义序列化。
- TouchRpc全系,在文件传输等大型IO时,由于心跳失败而断开连接。
- 优化AspNetCore的IContainer。
- TcpCommandLinePlugin与WSCommandLinePlugin支持获取客户端参数。
新增
- 插件实例会以单例注入容器。
- 所有适配器支持缓存超时设定。
- 修改所有事件为委托。
- 开放AspnetCore创建Tcp,Http等服务器的配置。
- IClient增加发送、接收的最后时间记录。
- Http支持多文件上传(目前仅支持小文件,具体大小以实际运行内存为准,实测100Mb没问题)。
- Websocket插件默认会处理Close报文。且插件支持Close。
- Rpc支持模板代码重写。
- TouchRpc支持元组。
- JsonRpc支持Websocket协议。
修改
- IScopedContainer修改为IContainerProvider
修复
- BytePool回收内存时不判断大小的bug。
删除
- 无。
版本号: 0.6.0
更新日期:2022.9.10 更新描述:兼容性更新,增强型更新。专为Unity 3D适配。 更新详情:
优化
- Gzip的压缩效率。
- 发送效率。
新增
- IDataCompressor数据传输压缩接口。
- RemoteStream支持数据读写压缩。
- WaitResultPackageBase类,专属非序列化的数据格式化。
- DelaySender延迟缓存发送。
修改
- 无
修复
- Rpc注册服务为单例时,实际上是瞬时服务的bug。
删除
- 独立线程发送。
版本号: 0.5.0
更新日期:2022.9.1 更新描述:兼容性更新,增强型更新。 更新详情:
优化
- 全局资源的获取逻辑。
新增
- Container增加卸载注册功能。
- FilePool新增FileStorageStream的获取。
- http客户端(及websocket)支持代理和验证代理。
- TouchRpc全系新增远程文件操作
- TouchRpc(除udp)新增远程流访问
修改
- 无
修复
- 修复Http客户端请求重复Header时的bug。
删除
- TouchRpc全系的事件操作,推荐直接插件的方式,或者使用TouchRpcActionPlugin然后添加委托。
更新示例 TouchRpc的相关事件均已使用插件代替。所以请使用插件实现操作。如果需要事件等功能的话,可以用TouchRpcActionPlugin的插件实现。例如:
.UsePlugin()
.ConfigurePlugins(a=>
{
a.Add<TouchRpcActionPlugin<TcpTouchRpcClient>>()//此处的逻辑可用插件替代完成。
.SetFileTransfering((client, e) =>
{
//有可能是上传,也有可能是下载
client.Logger.Info($"服务器请求传输文件,ID={client.ID},请求类型={e.TransferType},文件名={e.FileInfo.FileName}");
})
.SetFileTransfered((client, e) =>
{
//传输结束,但是不一定成功,需要从e.Result判断状态。
client.Logger.Info($"服务器传输文件结束,ID={client.ID},请求类型={e.TransferType},文件名={e.FileInfo.FileName},请求状态={e.Result}");
});
})
版本号: 0.4.5
更新日期:2022.8.25 更新描述:兼容性更新,增强型更新。 更新详情:
优化
- FileLogger的写入逻辑,大大地提升了写入效率。
新增
- Pipeline适配器
- TLV适配器
- WaitingClient支持按条件等待返回。
- 日志系统可以筛选日志的输出类型
- Rpc系统,可以使用单例、瞬时生命周期的服务。
- Rpc系统,可定义持久化模型。
- Rpc在使用瞬时生命周期的服务时,可以直接获取调用上下文。
- XmlRpc增加调用上下文。
修改
- 日志系统。
- Rpc的调用上下文均采用接口,例如:JsonRpc改为IJsonRpcCallContext,WebApi为IWebApiCallContext。
- IRpcActionFilter的参数列表。
修复
- UdpSession资源不释放的Bug。
删除
- 冗余元素。
版本号: 0.3.5
更新日期:2022.8.12 更新描述:兼容性更新,增强型更新。 更新详情:
优化
- 各类客户端发送逻辑。
- Method类的调用逻辑。
新增
- 适配器可以设定发送IRequestInfo对象。
- 插件新增UseWebSocket的快捷方式。
- ReconnectionPlugin插件可以获得重连次数的重载设置。
- ProTcpService的服务注入。
- ProHttpService的服务注入。
- ProIOC容器的共享使用。
修改
- 各类发送逻辑,以最小化发送方法为基础,其余方法改为扩展方法。
- 相关接口的实现。
- 由网友修改GetInfo
修复
- Container获取泛型失败bug。
- BetweenAnd适配器适配器部分bug。
- Router标签无法路由的bug。
- 修复TouchRpc推送文件状态不正确bug
- 修复独立线程在断线重连后发送bug。
删除
- 冗余的发送方法,不影响上版本任何使用。
版本号: 0.2.4
更新日期:2022.7.28 更新描述:兼容性更新。 更新详情:
优化
- 优化IOC容器。
- 优化Metadata的写入方式。
- FileLogger,当日志文件达到1Mb时,会再新增文件序号。
新增
- Mapper类,支持简单类型映射
- Tcp服务器、客户端、udp等增加端口复用配置。
- Pro轮询式断线重连。
- ProNATService转发客户端重连。
修改
- RRQM二进制序列化,改名为Fast。
- TouchRpcClient连接时的Metadata,改为由Config配置注入。
- FilePool,取消延迟释放机制。
修复
- 修复WebSocket连接问题
删除
- 客户端直接调用的短线重连方式。仅保留在Config注入的功能。
版本号: 0.1.0
更新日期:2022.7.16 更新描述:初始化版本发布。由RRQMSocket迁移而来。
迁移指南:
1.所有类的命名空间修改,此处如果类型名未修改的话,可由vs智能提示解决。
2.类型名称修改
原类型名称 | 新类型名称 |
---|---|
RRQMBitConverter | TouchSocketBitConverter |
RRQMConfig | TouchSocketConfig |
RRQMConverter | TouchSocketConverter |
RRQMDependencyObject | DependencyObject |
MsgEventArgs | MsgEventArgs |
RRQMEventAgrs | TouchSocketEventArgs |
IServerProvider | IRpcServer |
ServerProvider | RpcServer |
RRQMOverlengthException | OverlengthException |
3.使用逻辑修改
1)原RRQMConfig设置Logger的方法,改为容器注入:
断线重连逻辑
RpcStore使用变更
如果是仅有一个Rpc解析器,那么可以直接删除RpcStore的声明,从而使用对应的解析器实例,直接注册服务。然后可以通过其属性RpcStore,获取到具体的RpcStore实例。
如果是有多个解析器,那么,首先可以使用任意一个解析器的RpcStore属性实例,作为主RpcStore,然后添加其他解析器。当然也可以直接new RpcStore,然后统一管理解析器。其中构造函数中的Container容器,可以直接new Container(),但是更建议使用和解析器相同的容器,这样注入的服务会变得全局可用。