En | 中
三十功名尘与土, 八千里路云和月.
„TouchSocket“ ist ein leistungsstarkes und benutzerfreundliches .NET-Netzwerkkommunikations-Framework für Sprachen wie C#, VB.Net und F#. Es bietet eine Vielzahl von Kommunikationsmodulen, darunter TCP, UDP, SSL, WebSocket, Modbus usw. Es unterstützt die Lösung des Problems der Untervergabe von TCP-Paketen und der Kombination großer UDP-Paketfragmente. Das Framework unterstützt eine Vielzahl von Protokollvorlagen zum schnellen Parsen von Datenpaketen, z. B. feste Header, feste Längen und Intervallzeichen.
Der IOCP von TouchSocket ist nicht derselbe wie der herkömmliche. Nehmen Sie einfach das offizielle Beispiel von Microsoft als Beispiel. Er verwendet MemoryBuffer, um einen Teil des Speichers zu öffnen, ihn gleichmäßig aufzuteilen und dann jeder Sitzung eine zu empfangende Zone zuzuweisen Kopieren Sie die empfangenen Daten und verarbeiten Sie dann die kopierten Daten. Der TouchSocket besteht darin, vor jedem Empfang einen nutzbaren Speicherblock aus dem Speicherpool zu entnehmen und ihn dann direkt zum Empfangen zu verwenden. Nach dem Empfang der Daten wird der Speicherblock direkt zur Verarbeitung ausgegeben, um jedoch den Kopiervorgang zu vermeiden Es handelt sich nur um ein kleines Design, aber bei der Übertragung von 10 W mal 64 KB Daten beträgt der Leistungsunterschied das Zehnfache .
Ich glaube, dass jeder andere Socket-Produkte verwendet hat, daher ist TouchSocket auch darauf ausgelegt, von den hervorragenden Designkonzepten anderer Produkte zu lernen. Der Datenverarbeitungsadapter ist einer davon, aber im Gegensatz zum Design anderer Produkte ist der Adapter von TouchSocket leistungsstärker und leistungsfähiger einfach zu bedienen. und flexibel. Es kann nicht nur Pakete im Voraus analysieren, sondern auch Datenobjekte, die jederzeit ersetzt werden können und dann sofort wirksam werden. Sie können beispielsweise einen festen Paketheader zur Vorverarbeitung der Daten verwenden, um das Problem der Datenuntervergabe und des Sticky Packets zu lösen. Es kann auch das HTTP-Datenprotokoll, das WebSocket-Datenprotokoll usw. direkt analysieren.
TouchSocket bietet eine Vielzahl von Framework-Modellen und ist vollständig kompatibel mit allen Protokollen, die auf den Protokollen TCP und UDP basieren. TcpService und TcpClient verfügen beispielsweise über dieselben Grundfunktionen wie Sockets, verbessern jedoch die Robustheit und Parallelität des Frameworks und werfen die Verbindung und die empfangenen Daten in Form von Ereignissen aus, sodass Benutzer sie benutzerfreundlicher verwenden können.
Das Folgende ist nur ein einfaches Beispiel für die Erstellung eines Beispiels. Weitere Einzelheiten finden Sie in der Dokumentation.
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");
In der Plug-in-Konfiguration von Config können Sie das Reconnection-Plug-in verwenden.
.ConfigurePlugins(a=>
{
a.UseReconnection(5, true, 1000);
});
Der Adapter löst hauptsächlich das Problem des Tcp-Stickens und -Packens, und das Datenformat übernimmt einen einfachen und effizienten „Baotou + Data Body“-Modus, in dem Baotou Folgendes unterstützt:
Die oben genannten Datenheader verwenden alle den Standard-Seitenmodus (Little-End-Modus) von TouchSocketBitConverter, und Benutzer können den Standard-Seitenmodus entsprechend ihren Anforderungen wechseln.
TouchSocketBitConverter.DefaultEndianType = EndianType.Little;
Der benutzerdefinierte Adapter für feste Header hilft Benutzern hauptsächlich dabei, die Datenrahmeninformationen mit festen Headern zu lösen. Beispielsweise müssen für die folgenden Datenformate nur einige Schnittstellen implementiert werden, um die Analyse abzuschließen. Weitere Informationen finden Sie in der API.
|1|1|1|**********|
Der benutzerdefinierte Adapter für nicht feste Header hilft Benutzern hauptsächlich dabei, das Problem der Datenrahmeninformationen mit nicht festen Headern zu lösen. Beispielsweise haben die typischsten HTTP-Pakete einen Datenkopf, der durch „rn“ vom Datenkörper getrennt ist, und der Datenkopf ist aufgrund der unterschiedlichen Anforderungsinformationen des Anforderers nicht festgelegt, und die Länge des Datenkörpers ist unterschiedlich wird auch explizit durch den Wert der ContentLength des Datenheaders angegeben, sodass Sie die Verwendung von CustomUnfixedHeaderDataHandlingAdapter zum Parsen in Betracht ziehen können, was auch durch einfache Entwicklung erreicht werden kann.
Vielen Dank für Ihre Unterstützung von TouchSocket. Wenn Sie weitere Fragen haben, reichen Sie bitte ein Problem ein oder treten Sie der Gruppe QQ: 234762506 zur Diskussion bei.
Dank der Unterstützung der folgenden Tools
Das TouchSocket-Projekt wurde der dotNET China-Organisation hinzugefügt.