upgrade1.mdx 12.6 KB
Newer Older
若汝棋茗 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
---
id: upgrade
title: 历史更新
---

import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";

:::tip `TouchSocket` 框架升级/发版规则

**升级前重点关注可能造成【破坏性】的标签类型**:<Tag>修复</Tag>、<Tag>调整</Tag>、<Tag>移除</Tag>、<Tag>升级</Tag>

版本号规则:`主版本号.次版本号.修订版本号`

- 只要【确认】为框架 `bug`,则当天修复,当天发版,修订版本号 `加 1`。
- 如果 `.csproj` 文件有变更,则当天发版,修订版本号 `加 1`。
- 其余情况,每年发布一个 `主版本`。

:::

若汝棋茗 已提交
21 22 23 24 25 26 27 28 29
## v1.2.0

更新日期:2023.2.1

更新描述:兼容性更新。

  - &nbsp;<Tag>优化</Tag> TouchRpc支持命名元组。
  - &nbsp;<Tag>修复</Tag> 序列化、反射在unity中使用il2cpp编译的bug。
  - &nbsp;<Tag>新增</Tag> ByteBlock对于int,long等数据,写入和读取的时候支持大小端指定。
若汝棋茗 已提交
30
  - &nbsp;<Tag>调整</Tag> 将BytePool由静态调整为实例,且由其Default实例作为默认。
若汝棋茗 已提交
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
---

## v1.1.0

更新日期:2023.1.13

更新描述:小版本升级,可能会有不兼容。请按下列提示修改。 

  - &nbsp;<Tag>优化</Tag> TouchRpc系文件传输时,文件夹不存在的提示。
  - &nbsp;<Tag>优化</Tag> WaitingClient,当客户端断开连接时,可选是否抛出异常。
  - &nbsp;<Tag>优化</Tag> Fast序列化时。可选序列化只读属性。
  - &nbsp;<Tag>修复</Tag> 多个不稳定Bug。
  - &nbsp;<Tag>新增</Tag> Tcp客户端新增Disconnecting事件。在主动Close时生效。
  - &nbsp;<Tag>调整</Tag> 多个事件类名称修改,请按照提示修改即可。
  - &nbsp;<Tag>移除</Tag> 多个无用方法参数。
---

## v1.0.0

更新日期:2023.1.1

更新描述:大版本升级,请详细阅读下列更新日志。
若汝棋茗 已提交
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

  - &nbsp;<Tag>升级</Tag> 将最高版本升级为NET7。
  - &nbsp;<Tag>优化</Tag> Tcp系异步发送效率。
  - &nbsp;<Tag>优化</Tag> TouchRpc系Channel的稳健性。
  - &nbsp;<Tag>修复</Tag> 多个不稳定Bug。
  - &nbsp;<Tag>新增</Tag> ValueByteBlock,在简单代码块里面能有效减少创建的类。
  - &nbsp;<Tag>新增</Tag> MemoryCache类,其功能类似微软官方。但是支持全部泛型。
  - &nbsp;<Tag>新增</Tag> [IPackage系](https://www.yuque.com/rrqm/touchsocket/ag9tyar9mmhsme0m)。该系列能以超高效率的进行二进制序列化。
  - &nbsp;<Tag>新增</Tag> SingleTimer类,不可重入的Timer。
  - &nbsp;<Tag>新增</Tag> Jsonrpc支持自定义适配器解析(EE)
  - &nbsp;<Tag>新增</Tag> 严重TouchRpc系OnRouting通知,所有的客户端之间的通信,都必须经过OnRouting的筛查。
  - &nbsp;<Tag>新增</Tag> TouchRpc系小文件传输,在文件小于1Mb时,其传输效率是常规传输的10倍以上。
  - &nbsp;<Tag>新增</Tag> TouchRpc系超大文件多链路传输,支持多个客户端协同传输同一个文件,这在互联网环境中,效率比常规传输提高类3-5倍。
  - &nbsp;<Tag>新增</Tag> TouchRpc系Redis组件,能实现双端共同存储。
  - &nbsp;<Tag>调整</Tag> 严重精简所有命名空间,删除所有三级命名空间。例如:TouchSocket.Core.ByteManager精简为TouchSocket.Core。
  - &nbsp;<Tag>调整</Tag> 严重删除Newtonsoft.Json的源代码嵌入。全局的Json会根据环境动态调整,详情见[Json工具](https://www.yuque.com/rrqm/touchsocket/emqy43#PfVh1)
  - &nbsp;<Tag>调整</Tag> 严重框架默认日志由ConsoleLogger,替换为EmptyLogger(不输出任何东西)。
  - &nbsp;<Tag>调整</Tag> 严重Tcp全系,在连接时,ID的初始值使用long类型从0递增。
  - &nbsp;<Tag>调整</Tag> 严重Tcp服务器,将定时清理无数据交互的选项替换为UseCheckClear插件。并且默认没有启用,需要手动加入。
  - &nbsp;<Tag>调整</Tag> Tcp系适配器,取消部分参数。
  - &nbsp;<Tag>调整</Tag> DataLock改名为DataSecurity。
  - &nbsp;<Tag>调整</Tag> EasyAction改名EasyTask。
  - &nbsp;<Tag>调整</Tag> IMessage改名IMessageObject。
  - &nbsp;<Tag>调整</Tag> TokenInstance改名MessageInstance。
  - &nbsp;<Tag>调整</Tag> TouchRpc系,精简常规文件传输操作。
  - &nbsp;<Tag>调整</Tag> 严重TouchRpc系,所有插件通知参数,默认都设为不允许操作,需要手动设置e.IsPermitOperation=true。
  - &nbsp;<Tag>移除</Tag> Newtonsoft.Json的源代码嵌入。全局的Json会根据环境动态调整,详情见[Json工具](https://www.yuque.com/rrqm/touchsocket/emqy43#PfVh1)。

若汝棋茗 已提交
81 82
*** 更新示例指南 ***

若汝棋茗 已提交
83
(1)适配器参数报错:直接删除isAsync参数,以及isAsync为**True**的所有逻辑。
若汝棋茗 已提交
84
![image.png](../static/img/docs/upgrade-1.png)
若汝棋茗 已提交
85
(2)依赖属性的声明报错:增加泛型约束即可,详情查看[依赖属性](https://www.yuque.com/rrqm/touchsocket/ubk57o#jyzSl)
若汝棋茗 已提交
86
![image.png](../static/img/docs/upgrade-2.png)
若汝棋茗 已提交
87
(3)服务端定时清理警告:在配置插件中使用UseCheckClear,并且进行相关配置。
若汝棋茗 已提交
88 89
![image.png](../static/img/docs/upgrade-3.png)
![image.png](../static/img/docs/upgrade-4.png)
若汝棋茗 已提交
90 91 92 93

---


若汝棋茗 已提交
94
## 版本号: 0.7.0
若汝棋茗 已提交
95 96 97 98
更新日期:2022.9.21
更新描述:兼容性更新,增强型更新。**RPC内容需要客户端与服务器同步更新**。
更新详情:

若汝棋茗 已提交
99
优化
若汝棋茗 已提交
100 101 102 103
1. Fast二进制序列化,支持自定义序列化。
2. TouchRpc全系,在文件传输等大型IO时,由于心跳失败而断开连接。
3. 优化AspNetCore的IContainer。
4. TcpCommandLinePlugin与WSCommandLinePlugin支持获取客户端参数。
若汝棋茗 已提交
104 105

新增
若汝棋茗 已提交
106 107 108 109 110 111 112 113 114 115
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协议。
若汝棋茗 已提交
116 117

修改 
若汝棋茗 已提交
118
1. IScopedContainer修改为IContainerProvider
若汝棋茗 已提交
119 120
 
修复
若汝棋茗 已提交
121
1. BytePool回收内存时不判断大小的bug。
若汝棋茗 已提交
122 123

删除
若汝棋茗 已提交
124 125 126 127 128 129 130 131 132 133
1. 无。


---

## 版本号: 0.6.0
更新日期:2022.9.10
更新描述:兼容性更新,增强型更新。**专为Unity 3D适配**。
更新详情:

若汝棋茗 已提交
134
优化
若汝棋茗 已提交
135 136
1. Gzip的压缩效率。
2. 发送效率。
若汝棋茗 已提交
137 138

新增
若汝棋茗 已提交
139 140 141 142
1. IDataCompressor数据传输压缩接口。
2. [RemoteStream](https://www.yuque.com/rrqm/touchsocket/ukq0mu)支持数据读写压缩。
3. WaitResultPackageBase类,专属非序列化的数据格式化。
4. DelaySender[延迟缓存发送](https://www.yuque.com/rrqm/touchsocket/1f21a56ee75f896a5b5b38b37b071881#RL0kx)。
若汝棋茗 已提交
143 144

修改
若汝棋茗 已提交
145
1. 无
若汝棋茗 已提交
146 147

修复
若汝棋茗 已提交
148 149
1. Rpc注册服务为单例时,实际上是瞬时服务的bug。

若汝棋茗 已提交
150 151
删除
1. 独立线程发送。
若汝棋茗 已提交
152 153 154 155 156 157 158 159

---

## 版本号: 0.5.0
更新日期:2022.9.1
更新描述:兼容性更新,增强型更新。
更新详情:

若汝棋茗 已提交
160
优化
若汝棋茗 已提交
161
1. 全局资源的获取逻辑。
若汝棋茗 已提交
162 163

新增
若汝棋茗 已提交
164 165 166 167 168
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)
若汝棋茗 已提交
169 170

修改
若汝棋茗 已提交
171
1. 无
若汝棋茗 已提交
172 173

修复
若汝棋茗 已提交
174
1. 修复Http客户端请求重复Header时的bug。
若汝棋茗 已提交
175 176

删除
若汝棋茗 已提交
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
1. TouchRpc全系的事件操作,推荐直接插件的方式,或者使用TouchRpcActionPlugin然后添加委托。


更新示例
TouchRpc的相关事件均已使用插件代替。所以请使用插件实现操作。如果需要事件等功能的话,可以用TouchRpcActionPlugin的插件实现。例如:
```csharp
.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
更新描述:兼容性更新,增强型更新。
更新详情:

若汝棋茗 已提交
207
优化
若汝棋茗 已提交
208
1. FileLogger的写入逻辑,大大地提升了写入效率。
若汝棋茗 已提交
209 210

新增
若汝棋茗 已提交
211 212 213 214 215 216 217 218
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增加调用上下文。
若汝棋茗 已提交
219 220

修改
若汝棋茗 已提交
221 222 223
1. 日志系统。
2. Rpc的调用上下文均采用接口,例如:JsonRpc改为IJsonRpcCallContext,WebApi为IWebApiCallContext。
3. IRpcActionFilter的参数列表。
若汝棋茗 已提交
224 225

修复
若汝棋茗 已提交
226
1. UdpSession资源不释放的Bug。
若汝棋茗 已提交
227 228

删除
若汝棋茗 已提交
229 230 231 232 233 234 235 236 237 238
1. 冗余元素。


---

## 版本号: 0.3.5
更新日期:2022.8.12
更新描述:兼容性更新,增强型更新。
更新详情:

若汝棋茗 已提交
239
优化
若汝棋茗 已提交
240 241
1. 各类客户端发送逻辑。
2. Method类的调用逻辑。
若汝棋茗 已提交
242 243
 
新增
若汝棋茗 已提交
244 245 246 247 248 249
1. 适配器可以设定发送IRequestInfo对象。
2. 插件新增UseWebSocket的快捷方式。
3. ReconnectionPlugin插件可以获得重连次数的重载设置。
4. 【企业版】TcpService的服务注入。
5. 【企业版】HttpService的服务注入。
6. 【企业版】IOC容器的共享使用。
若汝棋茗 已提交
250 251

修改 
若汝棋茗 已提交
252 253 254
1. 各类发送逻辑,以最小化发送方法为基础,其余方法改为扩展方法。
2. 相关接口的实现。
3. 由网友[修改GetInfo](https://gitee.com/dotnetchina/TouchSocket/pulls/11)
若汝棋茗 已提交
255 256

修复
若汝棋茗 已提交
257 258 259 260 261
1. Container获取泛型失败bug。
2. BetweenAnd适配器适配器部分bug。
3. Router标签无法路由的bug。
4. 修复TouchRpc推送文件状态不正确bug
5. 修复独立线程在断线重连后发送bug。
若汝棋茗 已提交
262 263

删除
若汝棋茗 已提交
264 265 266 267 268 269 270 271 272 273 274
1. 冗余的发送方法,不影响上版本任何使用。


---


## 版本号: 0.2.4
更新日期:2022.7.28
更新描述:兼容性更新。
更新详情:

若汝棋茗 已提交
275
优化 
若汝棋茗 已提交
276 277 278
1. 优化IOC容器。
2. 优化Metadata的写入方式。
3. FileLogger,当日志文件达到1Mb时,会再新增文件序号。
若汝棋茗 已提交
279 280

新增
若汝棋茗 已提交
281 282 283 284
1. Mapper类,支持简单类型映射
2. Tcp服务器、客户端、udp等增加端口复用配置。
3. 【企业版】轮询式断线重连。
4. 【企业版】NATService转发客户端重连。
若汝棋茗 已提交
285 286

修改
若汝棋茗 已提交
287 288 289 290
1. RRQM二进制序列化,改名为Fast。
2. TouchRpcClient连接时的Metadata,改为由Config配置注入。
3. FilePool,取消延迟释放机制。

若汝棋茗 已提交
291 292
修复
1. 修复WebSocket连接问题
若汝棋茗 已提交
293

若汝棋茗 已提交
294 295
删除
1. 客户端直接调用的短线重连方式。仅保留在Config注入的功能。
若汝棋茗 已提交
296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319

---

## 版本号: 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的方法,改为容器注入:
若汝棋茗 已提交
320 321 322 323
![image.png](../static/img/docs/upgrade-5.png)
断线重连逻辑
![image.png](../static/img/docs/upgrade-6.png)
RpcStore使用变更
若汝棋茗 已提交
324 325 326
如果是仅有一个Rpc解析器,那么可以直接删除RpcStore的声明,从而使用对应的**解析器实例**,直接注册服务。然后可以通过其属性RpcStore,获取到具体的RpcStore实例。

如果是有多个解析器,那么,首先可以使用任意一个解析器的RpcStore属性实例,作为主RpcStore,然后添加其他解析器。当然也可以直接new RpcStore,然后统一管理解析器。其中构造函数中的Container容器,可以直接new Container(),但是更建议使用和解析器相同的容器,这样注入的服务会变得全局可用。