Introducción a la biblioteca de red de alto rendimiento Hp-Socket One

1. Introducción a la estructura de directorios

—DOC: documentos proporcionados oficialmente en el directorio, incluida la Guía de desarrollo

—DotNet: los pasos de desarrollo del proyecto .net, HPsocket.net se pueden implementar directamente a través de nuget

—Linux: proyectos de Linux, incluida la compilación de Android

-MacOS: Pasos de desarrollo para el entorno mac

—Windows: ingeniería de Windows, el entorno de desarrollo más utilizado

  --Bin:编译好的dll和lib

  --Demo:官方提供的使用示例,包括PUSH模型示例、 PULL模型示例、 PACK模型示例、 性能测试示例以及其它编程语言示例

  --Project:项目的VS工程

  --Include:使用HP-Socket库需要的头文件

  --Src是核心功能源代码,Project只是工程,源代码在这里

  --Common是通用功能源代码

  --Other Languages 其他语言项目地址

Actualmente es compatible con plataformas Windows y Linux.

2. Selección de modelo

2.1 ¿Qué es un paquete pegajoso o un paquete roto?

Dado que TCP es un socket de transmisión, los datos recibidos por el socket pueden no ser un paquete completo o un paquete fijo. En este momento, se necesita la capa de aplicación para desempacar y empacar. Por ejemplo, el cliente envía continuamente tres paquetes de datos con tamaños de 300, 500 y 100 respectivamente. Pero los datos recibidos por el extremo receptor pueden ser 200,400,100,200. Entonces, en este momento, necesitamos empaquetar y descomprimir los datos recibidos.
Dado que 200 es menos que un paquete de datos, es necesario combinar el siguiente paquete de datos 400. En este momento, el tamaño de los datos es 600, pero el primer paquete de datos enviado por el cliente es 300, por lo que debe dividir 600 en 300 + 300 en este momento. En este momento, puede obtener el primer paquete de datos 300 y los datos restantes 300, pero el segundo paquete de datos es 500. Los datos no son suficientes, por lo que debe combinar los siguientes 100 datos con un total de 400 datos. Todavía no es suficiente para un paquete y continuar empaquetando los 200 restantes. En este momento, se aceptan los datos 600, que es suficiente para un paquete de datos 500, por lo que 600 se desmonta en 500 + 100. Obtenga el segundo paquete de datos 500 y los datos restantes 100, que coinciden exactamente con el tercer paquete de datos 100. En este punto, el análisis del paquete de datos está completo. Lógica básica

while(true)
{
    data_size = recv_data();
    if(data_size < 数据包长度)
        continue;//继续接受数据
    ///循环拆包,当不够一个包的时候继续接受数据等待一个完整的包
    while(true)
    {
        //足够包长度,拆包
        data_size -= 数据包长度;
        //更新数据缓冲区,处理包
        hanle_pack(pack);
        if(data_size < 数据包长度)
            break;
    }
}

2.2 Tres modelos de recepción proporcionados por Hp-Socket

HP-Socket proporciona PUSH / PULL / PACK y otros modelos de recepción, y la aplicación puede elegir de forma flexible procesar el paquete y desempacar de forma manual, semiautomática o completamente automática.

Recibiendo modelo Recibir evento Descripción
EMPUJAR OnReceive (pSender, dwConnID, pData, iLength) Modo manual / modo nativo
JALAR OnReceive (pSender, dwConnID, iLength) Semiautomático
PAQUETE OnReceive (pSender, dwConnID, pData, iLength) Completamente automatico
  • Cuando el  componente del modelo PUSH activa el evento OnReceive (pSender, dwConnID, pData, iLength)
    del objeto de escucha , la aplicación necesita procesar los datos recibidos inmediatamente, como: procesamiento de paquetes adhesivos, análisis de protocolo, etc. El componente
    no proporcionará ninguna ayuda para el procesamiento de datos en la capa de aplicación.

  • Cuando el  componente del modelo PULL activa el evento OnReceive (pSender, dwConnID, iTotalLength) del objeto de escucha
    , la aplicación detecta si la longitud de los datos recibidos (iTotalLength) cumple con las
    condiciones de procesamiento de acuerdo con el protocolo de la capa de aplicación y lo procesa de forma selectiva. Este evento se puede ignorar cuando iTotalLength es menor que la longitud esperada actual
    ; cuando iTotalLength es mayor o igual que la longitud esperada actual, el
    método Fetch (dwConnID, pData, iDataLength) del componente se llama cíclicamente para extraer los datos requeridos hasta el número restante
    La longitud de los datos es menor que la longitud esperada actualmente.
    El modelo PULL es adecuado para
    escenarios en los que el protocolo de la capa de aplicación es completamente claro y el protocolo de la capa de aplicación puede conocer la longitud del siguiente paquete de datos basándose en el paquete de datos actual . Un escenario típico es Cabeza + Cuerpo. La longitud de la Cabeza es fija. El primer paquete es Cabeza.
    La longitud del Cuerpo se conoce por la Cabeza. Después de recibir el Cuerpo, el siguiente paquete debe ser la Cabeza.

  • Cuando el  componente del modelo PACK activa el evento OnReceive (pSender, dwConnID, pData, iLength)
    del objeto de escucha , se asegurará de que pData sea un paquete de datos completo. Los componentes del modelo PACK tienen la aplicación envía
    cada paquete de datos agrega automáticamente un encabezado de 4 bytes (32 bits), un componente de datos de acuerdo con la información del encabezado recibida del
    sub móvil, cada paquete de datos completo enviado a la aplicación a través de un programa de evento OnReceive.

Supongo que te gusta

Origin blog.csdn.net/weixin_41761608/article/details/115357183
Recomendado
Clasificación