GitHub - RRQM/TouchSocket: TouchSocket is an integrated .NET networking framework that includes modules for socket, TCP, UDP, SSL, named pipes, HTTP, WebSocket, RPC, and more. It offers a one-stop solution for TCP packet issues and enables quick implementation of custom data message parsing using protocol templates.

En | 中文

NuGet(TouchSocket) NuGet(TouchSocket) License star star fork NuGet(TouchSocket)

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


🎀 Description

Alt

TouchSocket is a simple, modern, and high-performance .NET networking framework, supporting C#, VB.NET, F#, and more. It helps you build powerful communication applications such as TCP / UDP / MQTT / WebSocket / SSL / HTTP / Modbus / RPC with ease.

The framework features a highly optimized IOCP/Socket implementation, robust memory pooling, a flexible data-adapter pipeline, and a rich plugin ecosystem including heartbeat, reconnection, SSL, RPC, and more.


🌟 Documentation


🖥 Supported Platforms

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

🥪 Supported Application Types

Console / WinForm / WPF / MAUI / Avalonia / Blazor / Xamarin / Unity (non-WebGL) / Mono / All C#-based platforms


🌴 TouchSocket at a Glance (Updated & Revised)

🚀 1. A Truly High-Performance IOCP Implementation

TouchSocket provides a deeply optimized IOCP design.

Implementation Memory Handling Performance Impact
Traditional IOCP (Microsoft sample) Uses a fixed shared buffer; received data must be copied to another buffer Extra copy → High overhead under load
TouchSocket IOCP Allocates a fresh memory block from the memory pool for each receive Zero extra copy → Significant performance gain

In stress tests (100k messages × 64KB), TouchSocket achieved up to 10× faster throughput compared to the traditional model.


🔧 2. Data Adapter System — The Heart of the Framework

The data-adapter pipeline is one of TouchSocket’s core strengths:

  • Parses headers and payloads
  • Handles sticky packets & fragmentation
  • Converts directly to data objects
  • Hot-swappable adapters
  • Built-in templates: fixed header, fixed length, terminator, HTTP, WebSocket, etc.

Adapters make protocol development clean, modular, and highly reusable.


🧩 3. Pluggable Extension System

TouchSocket’s Plugins system allows extending communication behavior across the entire lifecycle:

  • Auto reconnection
  • Heartbeat detection
  • SSL validation
  • Logging
  • Authentication
  • Custom data pipelines

All via:

.ConfigurePlugins(a => { ... });

🛠 4. Robust TCP/UDP Abstraction

TouchSocket maintains full compatibility with native Socket semantics while improving:

  • Stability
  • Concurrency and throughput
  • Connection lifecycle management
  • Exception handling
  • Unified event model (Connected / Received / Closed)

You can migrate existing Socket code with minimal changes.


📦 5. Unified Client/Server API

Across TCP, UDP, WebSocket, and others, TouchSocket exposes a consistent set of APIs:

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

This ensures a low learning curve and fast development.


🧠 6. High-Efficiency Memory Pool & Span-Based Processing

The framework is optimized with:

  • ByteBlock reusable high-performance buffers
  • MemoryPool
  • Span / Memory

Ensuring minimal allocations and low GC pressure during heavy workloads.


✨ Basic Examples

The following examples show only the simplest usage. Refer to the documentation for more advanced scenarios.

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($"Received: {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 Auto-Reconnection

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

🧩 Fixed-Header Package Mode

Solves packet fragmentation & merging issues.

Supports:

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

Endianness is configurable:

TouchSocketBitConverter.DefaultEndianType = EndianType.Little;

🧱 Custom Adapters

CustomFixedHeaderDataHandlingAdapter

For fixed-header formats such as:

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

CustomUnfixedHeaderDataHandlingAdapter

For variable-header protocols such as HTTP:

  • Header ends with \r\n\r\n
  • Body length from Content-Length

A small amount of code can build a complete parser.


👑 Feature Overview Diagram


🔗 Contact


🙏 Acknowledgements

Thank you all for supporting TouchSocket. If you have questions, feel free to submit an issue or join the QQ group.

Special thanks to:

  • Visual Studio
  • JetBrains
  • Visual Studio Code

❤️ Support the Author


📢 Statement

TouchSocket is a member of the dotNET China organization.