Fr | 中
三十功名尘与土,八千里路云和月。
« TouchSocket » est un framework de communication réseau .NET puissant et facile à utiliser pour des langages tels que C#, VB.Net et F#. Il fournit une variété de modules de communication, notamment TCP, UDP, SSL, WebSocket, Modbus, etc. Il prend en charge la résolution du problème de la sous-traitance des paquets TCP et de la combinaison de gros fragments de paquets UDP. Le framework prend en charge une variété de modèles de protocole pour analyser rapidement les paquets de données tels que les en-têtes fixes, les longueurs fixes et les caractères d'intervalle.
L'IOCP de TouchSocket n'est pas le même que l'IOCP traditionnel, prenons simplement l'exemple officiel de Microsoft, il utilise MemoryBuffer pour ouvrir un morceau de mémoire, le diviser uniformément, puis attribuer une zone à chaque session à recevoir, puis copiez les données reçues, puis traitez les données copiées. Le TouchSocket consiste à prendre un bloc de mémoire utilisable du pool de mémoire avant chaque réception, puis à l'utiliser directement pour la réception, et après avoir reçu les données, le bloc de mémoire est directement jeté pour le traitement, afin d'éviter l' opération de copie , bien que ce n'est qu'une petite conception, mais lors de la transmission de 10 W fois 64 Ko de données, la différence de performances est de 10 fois .
Je crois que tout le monde a utilisé d'autres produits Socket, donc TouchSocket est également conçu pour apprendre de l'excellent concept de conception d'autres produits, l'adaptateur de traitement de données en fait partie, mais contrairement à la conception d'autres produits, l'adaptateur de TouchSocket est plus puissant et facile à utiliser. et flexible. Non seulement il peut analyser les paquets à l'avance, mais il peut également analyser les objets de données, qui peuvent être remplacés à tout moment et prendre effet immédiatement. Par exemple, vous pouvez utiliser un en-tête de paquet fixe pour prétraiter les données, afin de résoudre le problème de la sous-traitance des données et des paquets persistants. Il peut également analyser directement le protocole de données HTTP, le protocole de données WebSocket, etc.
TouchSocket fournit une variété de modèles de framework et est entièrement compatible avec tous les protocoles basés sur les protocoles TCP et UDP. Par exemple, TcpService et TcpClient ont les mêmes fonctions de base que Sockets, mais ils améliorent la robustesse et la concurrence du framework, et lancent la connexion et les données reçues sous forme d'événements, afin que les utilisateurs puissent l'utiliser de manière plus conviviale.
Ce qui suit n'est qu'un exemple simple de la façon de créer un exemple, veuillez consulter la documentation pour plus de détails.
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");
Dans la configuration du plug-in de Config, vous pouvez utiliser le plug-in de reconnexion.
.ConfigurePlugins(a=>
{
a.UseReconnection(5, true, 1000);
});
L'adaptateur résout principalement le problème du collage et de l'emballage TCP, et le format de données adopte un mode « Baotou + Data Body » simple et efficace, dans lequel Baotou prend en charge :
Les en-têtes de données ci-dessus utilisent tous le mode latéral par défaut (mode petite extrémité) de TouchSocketBitConverter, et les utilisateurs peuvent changer le mode latéral par défaut en fonction de leurs besoins.
TouchSocketBitConverter.DefaultEndianType = EndianType.Little;
L'adaptateur d'en-tête fixe défini par l'utilisateur aide principalement les utilisateurs à résoudre les informations de trame de données avec des en-têtes fixes. Par exemple, les formats de données suivants n'ont besoin d'implémenter que quelques interfaces pour terminer l'analyse, veuillez vous référer à l'API pour plus de détails.
|1|1|1|************|
L'adaptateur d'en-tête non fixe défini par l'utilisateur aide principalement les utilisateurs à résoudre le problème des informations sur les trames de données avec des en-têtes non fixes. Par exemple, les paquets HTTP les plus typiques ont un en-tête de données séparé du corps de données par "rn", et l'en-tête de données n'est pas fixe en raison des différentes informations de demande du demandeur, et la longueur du corps de données est également explicitement spécifié par la valeur de ContentLength de l'en-tête de données, vous pouvez donc envisager d'utiliser CustomUnfixedHeaderDataHandlingAdapter pour analyser, ce qui peut également être réalisé grâce à un développement simple.
Merci pour votre soutien à TouchSocket, si vous avez d'autres questions, veuillez soumettre un problème ou rejoindre le groupe QQ : 234762506 pour en discuter.
Grâce au support des outils suivants
Le projet TouchSocket a été ajouté à l'organisation dotNET Chine.