En | 中
三十功名尘与土,八千里路云和月。
'TouchSocket' es un marco de comunicación de red .NET potente y fácil de usar para lenguajes como C#, VB.Net y F#. Proporciona una variedad de módulos de comunicación, incluidos TCP, UDP, SSL, WebSocket, Modbus, etc. Admite la solución del problema de la subcontratación de paquetes TCP y la combinación de fragmentos de paquetes grandes UDP. El marco admite una variedad de plantillas de protocolo para analizar rápidamente paquetes de datos, como encabezados fijos, longitudes fijas y caracteres de intervalo.
El IOCP de TouchSocket no es el mismo que el tradicional, solo tome el ejemplo oficial de Microsoft como ejemplo: usa MemoryBuffer para abrir una parte de la memoria, dividirla en partes iguales y luego asignar una zona a cada sesión para recibir, y luego copie los datos recibidos y luego procese los datos copiados. TouchSocket debe tomar un bloque de memoria utilizable del grupo de memoria antes de cada recepción y luego usarlo directamente para recibir, y después de recibir los datos, el bloque de memoria se desecha directamente para su procesamiento, para evitar la operación de copia , aunque Es solo un diseño pequeño, pero cuando se transmiten datos de 10w por 64kb , la diferencia de rendimiento es 10 veces mayor .
Creo que todos han usado otros productos Socket, por lo que TouchSocket también está diseñado para aprender del excelente concepto de diseño de otros productos, el adaptador de procesamiento de datos es uno de ellos, pero a diferencia del diseño de otros productos, el adaptador de TouchSocket es más potente y fácil de usar. y flexible. No solo puede analizar paquetes por adelantado, sino que también puede analizar objetos de datos, que pueden reemplazarse en cualquier momento y luego entrar en vigor de inmediato. Por ejemplo, puede utilizar un encabezado de paquete fijo para preprocesar los datos, a fin de resolver el problema de la subcontratación de datos y los paquetes fijos. También puede analizar directamente el protocolo de datos HTTP, el protocolo de datos WebSocket, etc.
TouchSocket proporciona una variedad de modelos de marco y es totalmente compatible con todos los protocolos basados en los protocolos TCP y UDP. Por ejemplo, TcpService y TcpClient tienen las mismas funciones básicas que Sockets, pero mejoran la solidez y la concurrencia del marco y generan la conexión y los datos recibidos en forma de eventos, para que los usuarios puedan usarlos de manera más fácil de usar.
El siguiente es solo un ejemplo simple de cómo crear un ejemplo; consulte la Documentación para obtener más detalles.
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");
En la configuración del complemento de Config, puede utilizar el complemento de reconexión.
.ConfigurePlugins(a=>
{
a.UseReconnection(5, true, 1000);
});
El adaptador resuelve principalmente el problema del pegado y empaquetado de Tcp, y el formato de datos adopta un modo "Baotou + Data Body" simple y eficiente, en el que Baotou admite:
Todos los encabezados de datos anteriores utilizan el modo lateral predeterminado (modo de extremo pequeño) de TouchSocketBitConverter, y los usuarios pueden cambiar el modo lateral predeterminado según sus necesidades.
TouchSocketBitConverter.DefaultEndianType = EndianType.Little;
El adaptador de encabezado fijo definido por el usuario ayuda principalmente a los usuarios a resolver la información del marco de datos con encabezados fijos. Por ejemplo, los siguientes formatos de datos solo necesitan implementar algunas interfaces para completar el análisis; consulte la API para obtener más detalles.
|1|1|1|**********|
El adaptador de encabezado no fijo definido por el usuario ayuda principalmente a los usuarios a resolver el problema de la información del marco de datos con encabezados no fijos. Por ejemplo, los paquetes HTTP más típicos tienen un encabezado de datos separado del cuerpo de datos por "rn", y el encabezado de datos no es fijo debido a la diferente información de solicitud del solicitante, y la longitud del cuerpo de datos es También se especifica explícitamente por el valor de ContentLength del encabezado de datos, por lo que puede considerar usar CustomUnfixedHeaderDataHandlingAdapter para analizar, lo que también se puede lograr mediante un desarrollo simple.
Gracias por su apoyo a TouchSocket. Si tiene alguna otra pregunta, envíe un problema o únase al grupo QQ: 234762506 para discutirlo.
Gracias al apoyo de las siguientes herramientas
El proyecto TouchSocket se ha agregado a la organización dotNET China.