TCP和SSL TCP應用
對於普通開發者而言編寫TCP應用通訊是一件相對復雜的工作,畢竟需要一系列的bytes操作;如果再針對SSL的安全性處理相信會把很多普通開發者拒之門外.為了簡化這一問題BeetleX引入了Stream操作模式並提供PipiStream操作對象讓開發者在TCP流操作上變得非常簡便;由於PipiStream是基本saea擴展的流操作模型,因此在提供簡便操作的同時還能提供出色的性能。以下介紹如何使用BeetleX構建TCP和基於SSL的TCP應用示例。
引用組件
使用組件可以通過Nuget引用組件,最新版本是1.2.6.8

構建TCP服務
組件構建通訊應用非常簡單,在引用組件后簡單實現IServerHandler接口即可,以下是簡單構建的服務代碼:
class Program : BeetleX.ServerHandlerBase
{
private static BeetleX.IServer mServer;
static void Main(string[] args)
{
mServer = SocketFactory.CreateTcpServer<Program>();
mServer.Open();
Console.WriteLine(mServer.Status);
Console.Read();
}
protected override void OnLogToConsole(IServer server, ServerLogEventArgs e)
{
Console.WriteLine($"{DateTime.Now}\t{e.Type}\t{e.Session?.RemoteEndPoint} {e.Message}");
}
public override void SessionReceive(IServer server, SessionReceiveEventArgs e)
{
base.SessionReceive(server, e);
var stream = e.Stream.ToPipeStream();
if (stream.TryReadLine(out string line))
{
Console.WriteLine(line);
stream.WriteLine($"{DateTime.Now}");
e.Stream.Flush();
}
}
}
ServerHandlerBase是組件內部實現IServerHandler接口,只需要簡單重寫SessionReceive事件來處理接收的數據可。以上代碼是嘗試從流中讀取一行字符信息,如果讀成功后顯示內容並把當前時間輸出給客戶端。
構建TCP客戶端
由於客戶端和服務端使用同一套Stream實現體系,所以在客戶端上也是使用同樣的流模式操作即可.
var client = SocketFactory.CreateClient<Clients.TcpClient>("localhost", 9090);
client.Connect();
var stream = client.Stream.ToPipeStream();
while (true)
{
string value = Console.ReadLine();
stream.WriteLine($"{DateTime.Now} {value}");
client.Stream.Flush();
client.Receive();
if (stream.TryReadLine(out string line))
{
Console.WriteLine(line);
}
}
運行效果

SSL服務端
很多時候應用需要一個可靠安全的通訊機制,組件默認提供SSL的支持;只需要簡單地配置一下SSL信息即可實現安全的SSL通訊。
class Program : BeetleX.ServerHandlerBase
{
private static BeetleX.IServer mServer;
static void Main(string[] args)
{
mServer = SocketFactory.CreateTcpServer<Program>();
mServer.Options.DefaultListen.SSL = true;
mServer.Options.DefaultListen.CertificateFile = "c:\\ikende.com.pfx";
mServer.Options.DefaultListen.CertificatePassword = "******";
mServer.Open();
Console.WriteLine(mServer.Status);
Console.Read();
}
protected override void OnLogToConsole(IServer server, ServerLogEventArgs e)
{
Console.WriteLine($"{DateTime.Now}\t{e.Type}\t{e.Session?.RemoteEndPoint} {e.Message}");
}
public override void SessionReceive(IServer server, SessionReceiveEventArgs e)
{
base.SessionReceive(server, e);
var stream = e.Stream.ToPipeStream();
if (stream.TryReadLine(out string line))
{
Console.WriteLine(line);
stream.WriteLine($"{DateTime.Now}");
e.Stream.Flush();
}
}
}
SSL客戶端
class Program
{
static void Main(string[] args)
{
var client = SocketFactory.CreateSslClient<Clients.TcpClient>("localhost", 9090, "ikende.com");
client.Connect();
var stream = client.Stream.ToPipeStream();
while (true)
{
string value = Console.ReadLine();
stream.WriteLine($"{DateTime.Now} {value}");
client.Stream.Flush();
client.Receive();
if (stream.TryReadLine(out string line))
{
Console.WriteLine(line);
}
}
}
}
在創建客戶端的SSL里需要指定證書對應的機構名稱,用於進行SSL驗證。
運行效果

組件在開啟SSL服務的日志輸出打印出詳細的證書信息,用於方便查看SSL的啟動狀態
支持平台
組件支持2.1或更高版本的dorecore 和Standard2.0
專注dotnet core 服務應用技術研發

- BeetleX高性能通訊組件,支持SSL
- FastHttpApi簡便高性能webapi組件,支持websocket、ssl性能高於asp.net core webapi 200%
- 高性能Webapi網關組件,支持自定義插件
什么時候使用BeetleX.FastHttpApi
- 當你需要一個高性能的webapi服務的時候,因為它具有asp.net core mvc的簡便使用特性的同時提升了200%或更高的性能。
- 當你希望接口同時支持http和websocket,組件支持一個邏輯控制器同時提供http和websocket兩種服務,即一份代碼即可服務http和websocket請求
- 當你需要一個嵌入的HTTP服務應用,組件支持netstandard2.0,可以靈活地在winform或wpf中集成一個可靠的HTTP服務。

