---
id: upgrade
sidebar_position: 2
title: 历史更新
sidebar_label: 02、历史更新
---
import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
:::tip `TouchSocket` 框架升级/发版规则
**升级前重点关注可能造成【破坏性】的标签类型**:修复、调整、移除、升级
版本号规则:`主版本号.次版本号.修订版本号`
- 只要【确认】为框架 `bug`,则当天修复,当天发版,修订版本号 `加 1`。
- 如果 `.csproj` 文件有变更,则当天发版,修订版本号 `加 1`。
- 其余情况,每年发布一个 `主版本`。
:::
## v1.0.0(已发布)
- 升级 将最高版本升级为NET7。
- 优化 Tcp系异步发送效率。
- 优化 TouchRpc系Channel的稳健性。
- 修复 多个不稳定Bug。
- 新增 ValueByteBlock,在简单代码块里面能有效减少创建的类。
- 新增 MemoryCache类,其功能类似微软官方。但是支持全部泛型。
- 新增 [IPackage系](https://www.yuque.com/rrqm/touchsocket/ag9tyar9mmhsme0m)。该系列能以超高效率的进行二进制序列化。
- 新增 SingleTimer类,不可重入的Timer。
- 新增 Jsonrpc支持自定义适配器解析(EE)
- 新增 严重TouchRpc系OnRouting通知,所有的客户端之间的通信,都必须经过OnRouting的筛查。
- 新增 TouchRpc系小文件传输,在文件小于1Mb时,其传输效率是常规传输的10倍以上。
- 新增 TouchRpc系超大文件多链路传输,支持多个客户端协同传输同一个文件,这在互联网环境中,效率比常规传输提高类3-5倍。
- 新增 TouchRpc系Redis组件,能实现双端共同存储。
- 调整 严重精简所有命名空间,删除所有三级命名空间。例如:TouchSocket.Core.ByteManager精简为TouchSocket.Core。
- 调整 严重删除Newtonsoft.Json的源代码嵌入。全局的Json会根据环境动态调整,详情见[Json工具](https://www.yuque.com/rrqm/touchsocket/emqy43#PfVh1)
- 调整 严重框架默认日志由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工具](https://www.yuque.com/rrqm/touchsocket/emqy43#PfVh1)。
*** 更新示例指南 ***
(1)适配器参数报错:直接删除isAsync参数,以及isAsync为**True**的所有逻辑。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/25438888/1671252946592-ef19cd00-63ca-4234-95f8-f217f79a3176.png#averageHue=%23d1d6f1&clientId=u58a6662d-6ba7-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=66&id=uf41edb79&margin=%5Bobject%20Object%5D&name=image.png&originHeight=131&originWidth=2170&originalType=binary&ratio=1&rotation=0&showTitle=false&size=199497&status=done&style=none&taskId=u8d25cc54-a3fd-4d54-b2ea-131d710813c&title=&width=1085)
(2)依赖属性的声明报错:增加泛型约束即可,详情查看[依赖属性](https://www.yuque.com/rrqm/touchsocket/ubk57o#jyzSl)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/25438888/1671253143983-d722a876-e39c-4e11-9728-df7da6bb1a99.png#averageHue=%23d0daee&clientId=u58a6662d-6ba7-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=158&id=u8bb9067d&margin=%5Bobject%20Object%5D&name=image.png&originHeight=316&originWidth=2369&originalType=binary&ratio=1&rotation=0&showTitle=false&size=440764&status=done&style=none&taskId=u0a09b0ab-f692-4bb7-91e1-7b27fb17466&title=&width=1184.5)
(3)服务端定时清理警告:在配置插件中使用UseCheckClear,并且进行相关配置。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/25438888/1671330357184-37a5e313-b8ce-42a4-bb86-1ae6b32d74dd.png#averageHue=%23dde2f3&clientId=u4b343245-662f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=255&id=u90705ca7&margin=%5Bobject%20Object%5D&name=image.png&originHeight=510&originWidth=2724&originalType=binary&ratio=1&rotation=0&showTitle=false&size=808521&status=done&style=none&taskId=u6f4957fb-5f96-4067-befe-e57fe70a6b2&title=&width=1362)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/25438888/1671330408915-585d99ef-655a-4889-8ef6-4dcd1dddd0f3.png#averageHue=%23d5def1&clientId=u4b343245-662f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=237&id=uce91bc71&margin=%5Bobject%20Object%5D&name=image.png&originHeight=473&originWidth=1830&originalType=binary&ratio=1&rotation=0&showTitle=false&size=628733&status=done&style=none&taskId=u159fed7d-e21c-47e7-a429-25ccf19c8d7&title=&width=915)
---
## 版本号: 0.7.0NET6
更新日期:2022.9.21
更新描述:兼容性更新,增强型更新。**RPC内容需要客户端与服务器同步更新**。
更新详情:
| 优化 |
1. Fast二进制序列化,支持自定义序列化。
2. TouchRpc全系,在文件传输等大型IO时,由于心跳失败而断开连接。
3. 优化AspNetCore的IContainer。
4. TcpCommandLinePlugin与WSCommandLinePlugin支持获取客户端参数。
|
| --- | --- |
| 新增 |
1. 插件实例会以单例注入容器。
2. 所有适配器支持[缓存超时](https://www.yuque.com/rrqm/touchsocket/83526e6320dfc85fef317d850aa51e92#Z0S0g)设定。
3. 修改所有事件为委托。
4. 开放[AspnetCore](https://www.yuque.com/rrqm/touchsocket/55e5bbf58745fa639dba511c7bcd54d1#WqOmh)创建Tcp,Http等服务器的配置。
5. IClient增加发送、接收的最后时间记录。
6. Http支持多文件上传(目前仅支持小文件,具体大小以实际运行内存为准,实测100Mb没问题)。
7. Websocket插件默认会处理Close报文。且插件支持Close。
8. Rpc支持模板代码重写。
9. TouchRpc支持元组。
10. JsonRpc支持Websocket协议。
|
| 修改 |
1. IScopedContainer修改为IContainerProvider
|
| 修复 |
1. BytePool回收内存时不判断大小的bug。
|
| 删除 |
1. 无。
|
---
## 版本号: 0.6.0
更新日期:2022.9.10
更新描述:兼容性更新,增强型更新。**专为Unity 3D适配**。
更新详情:
| 优化 |
1. Gzip的压缩效率。
2. 发送效率。
|
| --- | --- |
| 新增 |
1. IDataCompressor数据传输压缩接口。
2. [RemoteStream](https://www.yuque.com/rrqm/touchsocket/ukq0mu)支持数据读写压缩。
3. WaitResultPackageBase类,专属非序列化的数据格式化。
4. DelaySender[延迟缓存发送](https://www.yuque.com/rrqm/touchsocket/1f21a56ee75f896a5b5b38b37b071881#RL0kx)。
|
| 修改 |
1. 无
|
| 修复 |
1. Rpc注册服务为单例时,实际上是瞬时服务的bug。
|
| 删除 |
1. 独立线程发送。
|
---
## 版本号: 0.5.0
更新日期:2022.9.1
更新描述:兼容性更新,增强型更新。
更新详情:
| 优化 |
1. 全局资源的获取逻辑。
|
| --- | --- |
| 新增 |
1. Container增加卸载注册功能。
2. FilePool新增FileStorageStream的获取。
3. http客户端(及websocket)支持代理和验证代理。
4. TouchRpc全系新增[远程文件操作](https://www.yuque.com/rrqm/touchsocket/pearz0)
5. TouchRpc(除udp)新增[远程流访问](https://www.yuque.com/rrqm/touchsocket/ukq0mu)
|
| 修改 |
1. 无
|
| 修复 |
1. 修复Http客户端请求重复Header时的bug。
|
| 删除 |
1. TouchRpc全系的事件操作,推荐直接插件的方式,或者使用TouchRpcActionPlugin然后添加委托。
|
更新示例
TouchRpc的相关事件均已使用插件代替。所以请使用插件实现操作。如果需要事件等功能的话,可以用TouchRpcActionPlugin的插件实现。例如:
```csharp
.UsePlugin()
.ConfigurePlugins(a=>
{
a.Add>()//此处的逻辑可用插件替代完成。
.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
更新描述:兼容性更新,增强型更新。
更新详情:
| 优化 |
1. FileLogger的写入逻辑,大大地提升了写入效率。
|
| --- | --- |
| 新增 |
1. [Pipeline适配器](https://www.yuque.com/rrqm/touchsocket/ofnliu)
2. [TLV适配器](https://www.yuque.com/rrqm/touchsocket/wug4bv)
3. WaitingClient支持按条件等待返回。
4. 日志系统可以筛选日志的输出类型
5. Rpc系统,可以使用单例、瞬时生命周期的服务。
6. Rpc系统,可定义持久化模型。
7. Rpc在使用瞬时生命周期的服务时,可以直接获取调用上下文。
8. XmlRpc增加调用上下文。
|
| 修改 |
1. 日志系统。
2. Rpc的调用上下文均采用接口,例如:JsonRpc改为IJsonRpcCallContext,WebApi为IWebApiCallContext。
3. IRpcActionFilter的参数列表。
|
| 修复 |
1. UdpSession资源不释放的Bug。
|
| 删除 |
1. 冗余元素。
|
---
## 版本号: 0.3.5
更新日期:2022.8.12
更新描述:兼容性更新,增强型更新。
更新详情:
| 优化 |
1. 各类客户端发送逻辑。
2. Method类的调用逻辑。
|
| --- | --- |
| 新增 |
1. 适配器可以设定发送IRequestInfo对象。
2. 插件新增UseWebSocket的快捷方式。
3. ReconnectionPlugin插件可以获得重连次数的重载设置。
4. 【企业版】TcpService的服务注入。
5. 【企业版】HttpService的服务注入。
6. 【企业版】IOC容器的共享使用。
|
| 修改 |
1. 各类发送逻辑,以最小化发送方法为基础,其余方法改为扩展方法。
2. 相关接口的实现。
3. 由网友[修改GetInfo](https://gitee.com/dotnetchina/TouchSocket/pulls/11)
|
| 修复 |
1. Container获取泛型失败bug。
2. BetweenAnd适配器适配器部分bug。
3. Router标签无法路由的bug。
4. 修复TouchRpc推送文件状态不正确bug
5. 修复独立线程在断线重连后发送bug。
|
| 删除 |
1. 冗余的发送方法,不影响上版本任何使用。
|
---
## 版本号: 0.2.4
更新日期:2022.7.28
更新描述:兼容性更新。
更新详情:
| 优化 |
1. 优化IOC容器。
2. 优化Metadata的写入方式。
3. FileLogger,当日志文件达到1Mb时,会再新增文件序号。
|
| --- | --- |
| 新增 |
1. Mapper类,支持简单类型映射
2. Tcp服务器、客户端、udp等增加端口复用配置。
3. 【企业版】轮询式断线重连。
4. 【企业版】NATService转发客户端重连。
|
| 修改 |
1. RRQM二进制序列化,改名为Fast。
2. TouchRpcClient连接时的Metadata,改为由Config配置注入。
3. FilePool,取消延迟释放机制。
|
| 修复 |
1. 修复WebSocket连接问题
|
| 删除 |
1. 客户端直接调用的短线重连方式。仅保留在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的方法,改为容器注入:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/25438888/1657939909513-11ede2cd-0e7e-4bf2-a18c-a7640530407a.png#averageHue=%23cbd1e8&clientId=u91c718dd-98e9-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=251&id=u89906a2b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=501&originWidth=2713&originalType=binary&ratio=1&rotation=0&showTitle=false&size=888291&status=error&style=none&taskId=u23b65111-2fba-4578-8fa7-c02064bdce0&title=&width=1356.5)
2)断线重连逻辑
![C6Z(CQV9OAV3W`S5LPJWZ[F.png](https://cdn.nlark.com/yuque/0/2022/png/25438888/1658112000678-0d181543-ab61-4310-aab3-48200b99dd74.png#averageHue=%23d2ccc6&clientId=uab7c3379-07d2-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=815&id=u40357435&margin=%5Bobject%20Object%5D&name=C6Z%28CQV9OAV3W%60S5LPJWZ%5BF.png&originHeight=815&originWidth=1409&originalType=binary&ratio=1&rotation=0&showTitle=false&size=1061449&status=error&style=none&taskId=u80c7e4fc-cd6a-4119-809b-5e149582fbb&title=&width=1409)
3)RpcStore使用变更
如果是仅有一个Rpc解析器,那么可以直接删除RpcStore的声明,从而使用对应的**解析器实例**,直接注册服务。然后可以通过其属性RpcStore,获取到具体的RpcStore实例。
如果是有多个解析器,那么,首先可以使用任意一个解析器的RpcStore属性实例,作为主RpcStore,然后添加其他解析器。当然也可以直接new RpcStore,然后统一管理解析器。其中构造函数中的Container容器,可以直接new Container(),但是更建议使用和解析器相同的容器,这样注入的服务会变得全局可用。