居間
- tcp 組件是基於 tcp 協議的最基礎組件,其基礎功能和 socket 一致,只是經過 rrqm 封裝後,將高連接、高並發,數據處理等一系列基礎功能打包,讓使用者不再關心基礎架構建設,專心於業務。
- 理論上 tcp 組件可用於任何基於 tcp 協議的產品,例如:http、ftp、websocket、telnet、plc 通信、上位機通信等。
產品特點
- 簡單易用。
- 多線程。
- 內存池
- 高性能(伺服器每秒可接收 200w 條信息,接收數據流量可達 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) };//同时监听两个地址
//载入配置
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 生態圈越來越好!