Files
TouchSocket/README.zh.md
若汝棋茗 a144a8dbfe 文档(README): 优化文档结构与内容提升可读性
重写 README.md 和 README.zh.md 文件:
- 更新语言切换链接和徽章,新增 GitHub Star 徽章
- 优化描述部分,突出框架高性能与多协议支持
- 重构文档导航,合并支持环境与框架部分
- 增加性能对比表格,更新 IOCP 优化与数据适配器内容
- 提供现代化代码示例,使用 Memory.Span 替代 ByteBlock.Span
- 移除冗余内容,新增 TouchSocket 加入 dotNET China 声明
- 提供更清晰的联系与支持方式
2025-11-26 20:06:35 +08:00

7.0 KiB
Raw Blame History

| En

图片名称

纸上得来终觉浅,绝知此事要躬行。


🎀 描述

Alt

TouchSocket 是一个简洁、现代且高性能的 .NET 网络通信框架,支持 C#、VB.NET、F# 等语言。 你可以用它快速构建 TCP / UDP / MQTT / WebSocket / SSL / HTTP / Modbus / RPC 等各种网络应用。

框架提供高吞吐的 IOCP/Socket 实现、完善的内存池、灵活的数据适配器体系并为多种场景准备了丰富的扩展插件心跳、重连、SSL、RPC 等)。


🌟 文档导航


🖥 支持环境

  • .NET Framework ≥ 4.6.2
  • .NET Standard ≥ 2.0
  • .NET ≥ 6.0

🥪 支持框架

Console / WinForm / WPF / MAUI / Avalonia / Blazor / Xamarin / Unity(非 WebGL) / Mono / 其他所有 C# 生态


🌴 TouchSocket 特点速览

🚀 1. 真正高性能的 IOCP 实现

TouchSocket 在 IOCP 设计上进行了深度优化,与传统示例代码不同:

实现方式 内存处理方式 性能影响
传统 IOCP官方示例 接收区固定,收到数据后需要 复制 出来再处理 多一次复制 → 高并发场景拖慢速度
TouchSocket IOCP 每次接收前从 内存池 获取可写块,并直接用于接收 零额外复制 → 大流量下显著提升性能

实测在连续传输 10 万次、每次 64KB 数据的场景中,性能可达到传统实现的 约 10 倍


🔧 2. 适配器体系(数据处理的“插件化中枢”)

TouchSocket 最关键的模块之一——数据处理适配器,相比其他框架更灵活:

  • 可解析 协议头/协议体
  • 可自动处理 粘包 / 分包
  • 可直接转换 数据对象
  • 可随时替换适配器并立即生效
  • 内置多种协议模板固定包头、固定长度、终止字符、HTTP、WebSocket …

只需配置适配器即可让复杂协议瞬间变得可控。


🧩 3. 可插拔的框架扩展体系

TouchSocket 的 插件系统Plugins 允许在整个通信生命周期中注入行为,如:

  • 自动重连
  • 心跳检测
  • 日志
  • SSL 认证
  • 自定义鉴权
  • Pipeline 数据过滤

通过配置 .ConfigurePlugins() 即可轻松挂载。


🛠 4. 完整的 TCP/UDP 抽象与强兼容性

TCP/UDP 的使用方式与原生 Socket 一致,但 TouchSocket 提供更健壮的:

  • 异常处理
  • 高并发底层能力
  • 安全的连接管理
  • 标准化事件模型Connected/Received/Closed 等)

你可以无缝迁移现有 Socket 逻辑。


📦 5. 统一的客户端/服务端模型

无论 TCP、UDP、WebSocketTouchSocket 的 API 都尽量保持一致,让开发体验更加通用:

client.SendAsync(...)
client.Received += ...
client.ConnectAsync(...)

学习成本极低。


🧠 6. 强大的内存池与 Span/Memory 优化

整个框架深度使用:

  • ByteBlock高效可复用的内存块
  • 内存池 MemoryPool
  • Span / ReadOnlySpan

确保在高流量下保持低 GC 血压。


简单示例

以下仅展示最基础的入门代码,更多示例请查看文档。

TcpService

TcpService service = new TcpService();

service.Connected = (client, e) => EasyTask.CompletedTask;
service.Closed = (client, e) => EasyTask.CompletedTask;

service.Received = (client, e) =>
{
    string str = e.Memory.Span.ToString(Encoding.UTF8);
    Console.WriteLine($"收到:{str}");
    return EasyTask.CompletedTask;
};

await service.StartAsync(7789);

TcpClient

TcpClient client = new TcpClient();

client.Connected = (c, e) => EasyTask.CompletedTask;
client.Closed = (c, e) => EasyTask.CompletedTask;

client.Received = (c, e) =>
{
    Console.WriteLine(e.Memory.Span.ToString());
    return EasyTask.CompletedTask;
};

await client.ConnectAsync("127.0.0.1:7789");
await client.SendAsync("Hello");

TcpClient 断线重连

.ConfigurePlugins(a =>
{
    a.UseReconnection<TcpClient>();
});

🧩 固定包头模式FixedHeaderPackageAdapter

适用于处理粘包/分包。

支持:

  • Byte = 1 + n≤255B
  • Ushort = 2 + n≤65535B
  • Int = 4 + n≤2GB

端序由 TouchSocketBitConverter 控制:

TouchSocketBitConverter.DefaultEndianType = EndianType.Little;

🧱 自定义适配器

CustomFixedHeaderDataHandlingAdapter

适用于固定包头结构,例如:

| 1 | 1 | 1 | ********** |

CustomUnfixedHeaderDataHandlingAdapter

适用于不固定头结构,如 HTTP

  • 头以 \r\n\r\n 分隔
  • Content-Length 决定数据体长度

可用少量代码完成解析。


👑 功能导图


🔗 联系作者


🙏 致谢

感谢大家对 TouchSocket 的支持。 如有问题,欢迎 Issue 或加入 QQ 群交流。

特别感谢以下开发工具:

  • Visual Studio
  • JetBrains
  • VS Code

❤️ 支持作者


📢 特别声明

TouchSocket 已加入 dotNET China 组织。