えん| 中
三十功名尘土、八千里路云和月。
「TouchSocket」は、C#、VB.Net、F# などの言語用の強力で使いやすい .NET ネットワーク通信フレームワークです。 TCP、UDP、SSL、WebSocket、Modbus などのさまざまな通信モジュールを提供します。TCP パケットの下請けと UDP の大きなパケット フラグメントの組み合わせの問題の解決をサポートします。このフレームワークは、固定ヘッダー、固定長、間隔文字などのデータ パケットを迅速に解析するためのさまざまなプロトコル テンプレートをサポートしています。
TouchSocket の IOCP は従来のものと同じではありません。Microsoft の公式例を例に挙げると、MemoryBuffer を使用してメモリの一部を開き、それを均等に分割し、受信する各セッションにゾーンを割り当てます。受信したデータをコピーし、コピーしたデータを処理します。 TouchSocket は、各受信の前にメモリ プールから使用可能なメモリ ブロックを取得し、それを受信に直接使用します。データの受信後、メモリ ブロックはコピー操作を避けるために処理のために直接スローされます。小さな設計ですが、 10w × 64kbデータを送信すると、性能差は10倍になります。
誰もが他の Socket 製品を使用したことがあると思います。TouchSocket も他の製品の優れた設計コンセプトから学ぶように設計されており、データ処理アダプターもその 1 つですが、他の製品の設計とは異なり、TouchSocket のアダプターはより強力であり、使いやすい。そして柔軟です。パケットを事前に解析できるだけでなく、いつでも置き換えることができ、すぐに有効になるデータ オブジェクトも解析できます。たとえば、固定パケット ヘッダーを使用してデータを前処理することで、データの再委託やスティッキー パケットの問題を解決できます。 HTTP データ プロトコル、WebSocket データ プロトコルなどを直接解析することもできます。
TouchSocket はさまざまなフレームワーク モデルを提供し、TCP および UDP プロトコルに基づくすべてのプロトコルと完全な互換性があります。たとえば、TcpService や TcpClient は、基本的な機能は Sockets と同じですが、フレームワークの堅牢性と同時実行性を強化し、接続と受信したデータをイベントの形式でスローすることで、ユーザーがより使いやすくなります。
以下は、サンプルの作成方法の簡単な例です。詳細については、ドキュメントを参照してください。
TcpService service = new TcpService();
service.Connecting = (client, e) => {return EasyTask.CompletedTask; };//有客户端正在连接
service.Connected = (client, e) => {return EasyTask.CompletedTask; };//有客户端连接
service.Disconnected = (client, e) => {return EasyTask.CompletedTask; };//有客户端断开连接
service.Received = (client, e) =>
{
//Received information from the client
string mes = e.ByteBlock.Span.ToString(Encoding.UTF8);
Console.WriteLine($"Removed from {client. ID} Message received: {}");
return EasyTask.CompletedTask;
};
await service.StartAsync(7789);//Start
TcpClient tcpClient = new TcpClient();
tcpClient.Connected = (client, e) => {return EasyTask.CompletedTask; };//Successfully connected to the server
tcpClient.Disconnected = (client, e) => {return EasyTask.CompletedTask; };//Disconnect from the server, which is not triggered when the connection is unsuccessful.
tcpClient.Received = (client, e) =>
{
//Information is received from the server
string mes = e.ByteBlock.Span.ToString(Encoding.UTF8);
Console.WriteLine($"Message received: {mes}");
return EasyTask.CompletedTask;
};
await tcpClient.ConnectAsync("127.0.0.1:7789");
await tcpClient.SendAsync("Hello");
Configのプラグイン設定では、再接続プラグインを利用することができます。
.ConfigurePlugins(a=>
{
a.UseReconnection(5, true, 1000);
});
このアダプターは主に Tcp のスティッキングとパッキングの問題を解決し、データ形式はシンプルで効率的な「Baotou + データ本体」モードを採用しており、Baotou は以下をサポートします。
上記のデータ ヘッダーはすべて TouchSocketBitConverter のデフォルトのサイド モード (リトルエンド モード) を使用しており、ユーザーは必要に応じてデフォルトのサイド モードを切り替えることができます。
TouchSocketBitConverter.DefaultEndianType = EndianType.Little;
ユーザー定義の固定ヘッダー アダプターは、主にユーザーが固定ヘッダーを使用してデータ フレーム情報を解決するのに役立ちます。たとえば、次のデータ形式では、解析を完了するためにいくつかのインターフェイスを実装するだけで済みます。詳細については API を参照してください。
|1|1|1|**********|
ユーザー定義の非固定ヘッダー アダプターは、主にユーザーが非固定ヘッダーを含むデータ フレーム情報の問題を解決するのに役立ちます。たとえば、最も一般的な HTTP パケットには、データ本体とデータ ヘッダーが「rn」で区切られていますが、要求元の要求情報が異なるためデータ ヘッダーは固定されておらず、データ本体の長さはまた、データ ヘッダーの ContentLength の値によって明示的に指定されるため、CustomUnfixedHeaderDataHandlingAdapter を使用して解析することを検討できます。これも簡単な開発で実現できます。
TouchSocket をサポートしていただきありがとうございます。他にご質問がある場合は、問題を送信するか、グループ QQ: 234762506 に参加して議論してください。
以下のツールのサポートのおかげで
TouchSocket プロジェクトが dotNET China 組織に追加されました。