紹介
- TCPコンポーネントは、TCPプロトコルに基づく最も基本的なコンポーネントであり、その基本機能はSocketと同じですが、RRQMでラップすることで、高接続、高同時実行、データ処理などの一連の基本機能をパッケージ化し、利用者は基盤構造の構築を気にせず、ビジネスに専念できます。
- 理論上、TCPコンポーネントは、HTTP、FTP、WebSocket、Telnet、PLC通信、上位機通信など、TCPプロトコルに基づくあらゆる製品に使用できます。
製品の特徴
- シンプルで使いやすい。
- マルチスレッド。
- メモリプール
- 高性能(サーバーは毎秒200万件のメッセージ、受信データ流量は2.5GB/sに達する)
- 複数のデータ受信モード(IOCP、BIO、Select)。
- 複数アドレス監視(複数の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) };//2つのアドレスを同時に監視
//設定をロード
service.Setup(config);
service.Start();
TcpClientの作成
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エコシステムがますます良くなることを願っています!