RRQMSocketを使用したTCP 通信

RRQMSocketを使用したTCP 通信

RQMパッケージの後、高接続性、高同時性、データ処理などの一連の基本機能がパッケージ化され、ユーザーはもはやインフラストラクチャの建設に関心がなくなり、業務に集中できるようになります。

最后更新 2022/05/26 21:11
黑哥聊dotNet
预计阅读 3 分钟
分类
.NET
标签
.NET C# 建築設計の構造 RRQMSocket TCP

プレゼンテーション:プレゼンテーション

  • TCPコンポーネントはTCPプロトコルに基づいた最も基本的なコンポーネントであり、その基本機能とSocketは一致しており、RQMカプセル化後、高接続、高同時性、データ処理などの一連の基本機能をパッケージ化して、利用者がもはやインフラストラクチャ建設に関心を持たず、業務に専念するようにします。
  • 理論的には、TCPコンポーネントは、HTTP、FTP、WebSocket、Telnet、PLC 通信、ホストコンピュータ通信など、あらゆるTCPプロトコルベースの製品で使用できます。

製品の特徴

  • シンプルで使いやすい。
  • Multiple Threadシングル
  • メモリープール
  • 高性能(サーバは毎秒200Wのメッセージを受信でき、最大2.5 GB/秒のデータを受信できる)
  • 複数のデータ受信モード(IOCP、BIO、セレクト)。
  • マルチアドレスリスニング(複数のIPとポートを一度にリッスン)
  • アダプター前処理、ワンタップで下請け、接着パッケージ、オブジェクト解析(HTTP、Jsonなど)などを解決する。
  • 超シンプルな同期送信、非同期送信、受信などの操作。
  • イベント駆動に基づいて、各ステップをマスターします。

製品の応用シーン

  • TCPベースの使用シナリオ:クロスプラットフォーム、クロス言語で使用できます。
  • カスタムプロトコル解決シナリオ:任意のデータ形式のTCPパケットを解決できます。

弊社のシステムのデモを以下に示します。

TcpServiceの作成

TcpServiceはTCPサーバベースクラスですが、実際のデータ相互作用には関与しません。実際のデータ相互作用はSocketClientによって完了されるため、TcpServiceの機能は設定、有効化、管理、ログオフのみです。

SocketClientクラスのインスタンスを再構築するため、TcpServiceではSocketClientから派生するジェネリック型を指定し、受信したデータまたはアダプタで変換されたオブジェクトの処理方法を示すHandleReceivedDataメソッドを実装する必要があります。

具体的な作成過程は以下の通りです。

TcpService service = new TcpService();
service.Connecting += (client, e) =>{};//有客户端正在连接
service.Connected += (client, e) =>{};//有客户端连接
service.Disconnected += (client, e) =>{};//有客户端断开连接
service.Received += (client, byteBlock ,requestInfo) =>
{
    //从客户端收到信息
    string mes = Encoding.UTF8.GetString(byteBlock.Buffer, 0, byteBlock.Len);
    Console.WriteLine($"已从{client.Name}接收到信息:{mes}");//Name即IP+Port
};
//声明配置
var config = new TcpServiceConfig();
config.ListenIPHosts = new IPHost[] { new IPHost("127.0.0.1:7789"), new IPHost(7790) };//同时监听两个地址
//载入配置
service.Setup(config);
service.Start();

TClientの作成

TcpClientはTCPクライアントの基本クラスであり、インスタンスを作成できない抽象クラスであり、受信したデータの処理方法を示すHandleReceivedDataメソッドを継承して実装します。

SimpleTcpClient tcpClient = new SimpleTcpClient();
tcpClient.Connected += (client, e) =>{};//成功连接到服务器
tcpClient.Disconnected += (client, e) =>{};//从服务器断开连接,当连接不成功时不会触发。
tcpClient.Received += (client, byteBlock ,requestInfo) =>
{
    //从服务器收到信息
    string mes = Encoding.UTF8.GetString(byteBlock.Buffer, 0, byteBlock.Len);
    Console.WriteLine($"接收到信息:{mes}");
};
//载入配置
tcpClient.Setup("127.0.0.1:7789");
tcpClient.Connect();
tcpClient.Send(Encoding.UTF8.GetBytes("RRQM"));

クライアント側とサーバ側の送信はすべてsendメソッドでカプセル化されており、TcpClientとTcpServiceには複数の送信メソッドが組み込まれており、直接呼び出して送信できます。送信に失敗した場合は、直ちに例外がスローされます。

service.Send(“”);

最后に皆は私の文章を好きになって、まだ迷惑をかけて注意を払う、希望 net生态圏がますます良くなる!

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2026/04/22

バージョン別の. NETサポート状況(250 7 0 7更新)

仮想マシンとテストマシンを使用して、各バージョンのオペレーティングシステムの. NETサポートをテストします。オペレーティングシステムのインストール後、対応するランタイムを測定し、スターダストエージェントをパスとして実行できます。

继续阅读
同分类 / 同标签 2026/02/07

AOTの使用経験

プロジェクトの最初から、新しい機能が追加されたり、新しい構文が使用されたりするたびに、AOTリリーステストを行うという良い習慣を身につける必要があります。

继续阅读