protocolo TAF (marco de aplicaciones Total) de comunicación basado en Tars protocolo

La estructura básica de datos codificados

Cada datos consta de dos partes, como se muestra a continuación:

| 头信息 | 实际数据 |

Donde la información de cabecera incluye las siguientes secciones:

| Type(4 bits) | Tag 1(4 bits) | Tag 2(1 byte) |

Tag 2 es opcional, y cuando el valor de la etiqueta no es más de 14, sólo se puede utilizar la etiqueta 1 representa; Tag cuando el valor de más de 14 y menos de 256, Tag 1 se fija en 15, y representa el valor de Tag 2 Tag por . Tag 255 es mayor que el permitido.

Juntos representan un Tag 1 y 2 de la etiqueta. Se extiende de 0 a 255, es decir, el campo de datos de ID en la estructura utilizada para distinguir entre diferentes campos.

Tipo indica el tipo, representado por cuatro bits, que van desde 0 a 15, se utiliza para identificar el tipo de datos. Los diferentes tipos de datos, a partir de entonces, seguido de la longitud y el formato de los datos reales no son los mismos, ver qué tipo de mesa.
Aquí Insertar imagen Descripción

Los tipos básicos (incluyendo INT1, INT2, int4, int8, float, double)

Los datos numéricos inmediatamente después de la información de la cabecera. char, bool también es visto como un número entero. No distingue entre todos los datos enteros, lo que significa que un valor se puede asignar a un corto int.

0 digital

Después de los datos con la información de cabecera no indica el valor 0. 0 todos los tipos básicos de tales valores pueden ser representados.

Esto tiene en cuenta la probabilidad de ocurrencia de un número relativamente grande 0, a fin de poner un solo tipo, para ahorrar espacio.

String (incluyendo Cadena1, STRING4)

Cadena1 con una longitud de byte (la longitud de los datos no incluye información de cabecera), seguido inmediatamente por el contenido.

String4 similar.

Mapa

Seguido por una formación de datos (incluyendo la cabecera) indica el tamaño del mapa, a continuación, seguido [Datos clave (etiqueta es 0), Valor de datos (etiqueta 1)] lista.

Lista

Seguido por una conformación de datos (incluyendo información de cabecera) representados por Tamaño de la lista, a continuación, la lista de elementos seguido (Tag 0)

estructura personalizada comienza

Puesto que la estructura de inicio bandera definición, seguido por un campo de datos, campo de etiqueta dispuesta en orden ascendente

Estructura final personalizada

marcas personalizadas del extremo de la estructura, Tag 0

la persistencia de objetos

Para las estructuras personalizados persistentes, identificado por el indicador de inicio y la bandera final.

Dicha estructura define como sigue:

struct TestInfo
{
    1  require  int    ii  = 34;
    2  optional string s   = "abc";
};struct TestInfo2
{
    1  require TestInfo  t;
    2  require int       a = 12345;
}

En el que el resultado TestInfo2 configuración predeterminada codificada:
Aquí Insertar imagen Descripción

Formato de los mensajes

TUP protocolo definido completamente alquitranes, en consonancia con los alquitranes subyacentes definición de paquete de datos, que requieren el campo TUP se requiere campo subyacente, el campo es opcional necesidad de acceso alquitranes utilizar servicios adicionales.

Solicitud de paquetes:

//请求包体
struct RequestPacket
{
    1  require short        iVersion;         //版本号
    2  optional byte        cPacketType;      //包类型
    3  optional int         iMessageType;     //消息类型
    4  require int          iRequestId;       //请求ID
    5  require string       sServantName;     //servant名字
    6  require string       sFuncName;        //函数名称
    7  require vector<byte> sBuffer;          //二进制buffer
    8  optional int         iTimeout;         //超时时间(毫秒)
    9  optional map<string, string> context;  //业务上下文
    10 optional map<string, string> status;   //框架协议上下文
};

paquete de respuesta:

//响应包体
struct ResponsePacket
{
    1 require short         iVersion;       //版本号
    2 optional byte         cPacketType;    //包类型
    3 require int           iRequestId;     //请求ID
    4 optional int          iMessageType;   //消息类型
    5 optional int          iRet;           //返回值
    6 require vector<byte>  sBuffer;        //二进制流
    7 optional map<string, string> status;  //协议上下文
    8 optional string       sResultDesc;    //结果描述
};//返回值
const int TAFSERVERSUCCESS       = 0;       //服务器端处理成功
const int TAFSERVERDECODEERR     = -1;      //服务器端解码异常
const int TAFSERVERENCODEERR     = -2;      //服务器端编码异常
const int TAFSERVERNOFUNCERR     = -3;      //服务器端没有该函数
const int TAFSERVERNOSERVANTERR  = -4;      //服务器端没有该Servant对象
const int TAFSERVERRESETGRID     = -5;      //服务器端灰度状态不一致
const int TAFSERVERQUEUETIMEOUT  = -6;      //服务器队列超过限制
const int TAFASYNCCALLTIMEOUT    = -7;      //异步调用超时
const int TAFINVOKETIMEOUT       = -7;      //调用超时
const int TAFPROXYCONNECTERR     = -8;      //proxy链接异常
const int TAFSERVEROVERLOAD      = -9;      //服务器端超负载,超过队列长度
const int TAFADAPTERNULL         = -10;     //客户端选路为空,服务不存在或者所有服务down掉了
const int TAFINVOKEBYINVALIDESET = -11;     //客户端按set规则调用非法
const int TAFCLIENTDECODEERR     = -12;     //客户端解码异常
const int TAFSERVERUNKNOWNERR    = -99;     //服务器端位置异常

Oficial:
https://tarscloud.gitbook.io/tarsdocs/rumen/tars-protocol

Publicados 202 artículos originales · elogios ganado 14 · Vistas a 40000 +

Supongo que te gusta

Origin blog.csdn.net/LU_ZHAO/article/details/105021837
Recomendado
Clasificación