Tabla de contenido generada con DocToc
1. Acuerdo de paquete
// [4]byte -- length fixed_size,binary big endian encode
// [4]byte -- messageID fixed_size,binary big endian encode
// [4]byte -- headerLength fixed_size,binary big endian encode
// [4]byte -- bodyLength fixed_size,binary big endian encode
// []byte -- header marshal by json
// []byte -- body marshal by json
2. Operaciones relacionadas
2.1 codificación Big-endian
- Convierta el número de uint32 en [4] bytes. [] byte corresponde a uint8Array en js
// params:: uint32
// return uInt8Array[4]
function daduanbianma(params) {
var bytes = new ArrayBuffer(4)
var view = new DataView(bytes)
// 大端编码
var number = params
view.setUint32(0, number, false)
return new Uint8Array(bytes)
}
2.2 Decodificación big-endian
// params: uint8Array[4]
// return uint32
function daduanjiema(params) {
const buf = Buffer.from(params);
return buf.readUInt32BE(0)
}
2.3 cadena a utf8-uint8Array [], utf8-uint8Array a cadena
- Para estructuras de texto como el encabezado y el cuerpo, debe usar el convertidor utf8, porque js tiene el valor predeterminado utf16.
// params::string
// return uint8Array[]
function encodeUTF8(params) {
var encoder = new TextEncoder('utf-8')
var buf = encoder.encode(params)
return buf
}
// params:: 由go服务端产生的utf8编码的uint8Array[]
// return string
func decodeUTF8UintArray(params) {
var decoder = new TextDecoder('utf-8')
var jsonStr = decoder.decode(params)
return jsonStr
}
2.4 serialización json
// 将{}转化为json string
var jsonobj = {
'name': 'ft'}
var jsonstr = JSON.stringify(jsonobj)
// 将json string 转 json obj
var obj = JSON.parse(jsonstr)
2.5 costura y lectura de uint8Array
// 拼接
// xulieLength 和 messageId均为 Uint8Array
var concatArray = new Uint8Array([...xulieLength,...messageId])
// 截取
// buffer为ArrayBuffer类型,从流中读取出来的默认类型
// 该句表示,头长度记录在该段序列的第八位后4个长度
var headerLengthBytes = new Uint8Array(buffer, 8, 4);
3. js-api
Dirección: http://www.baidu.com , para actualizar
3.1 Codificación
3.1.1 paquete (ID de mensaje, encabezado, cuerpo)
- Codifique todo, use el ejemplo:
pack(0, {
Router-Type:'URL_PATTERN',
URL-Pattern-Value: '/user-pool/kf-user-info/login/',
}, {
chanel: 'web,
})
3.1.2 packURL (urlPattern, cuerpo)
- Equivalente a
pack(0, {
Router-Type:'URL_PATTERN',
URL-Pattern-Value: urlPattern,
}, body)
Ejemplo:
packURL('/user-pool/kf-user-info/login/', {
chanel: 'web'})
3.1.3 packSerialURL (urlPattern, cuerpo)
- El mensaje enviado se procesará en serie y los mensajes posteriores esperarán antes de que se procese el mensaje.
- Generalmente se utiliza en inicio de sesión, autenticación, verificación, etc.
- Equivalente a
pack(2020, {
Router-Type:'URL_PATTERN',
URL-Pattern-Value: urlPattern,
}, body)
- Ejemplo:
packSerialURL('/user-pool/kf-user-info/login/', {
chanel: 'web'})
3.1.4 packPipeURL (parámetros)
- Esta cadena de mensajes se ejecutará de forma sincrónica y secuencial, y los conjuntos de mensajes en params son seriales entre sí y paralelos a otros mensajes.
params格式为:
[
{
urlPattern: '/user-pool/kf-user-info/login/',
body: {
chanel: 'web'}
},
{
urlPattern: '/user-pool/kf-user-info/login/',
body: {
chanel: 'web'}
},
]
3.2 Decodificación
3.2.1 lengthOf (flujo)
• Obtenga la longitud del protocolo de paquete n. ° 1, que es 4 menos que la longitud de un protocolo de paquete
• el flujo es de tipo uint8Array, que es una unidad de paquete
• devuelve uint32
var l = lengthOf(stream)
3.2.2 messageIDOf (flujo)
• Obtenga el número de mensaje en el protocolo de paquete
• el flujo es de tipo uint8Array, que es una unidad de paquete
• devuelve uint32
var messageID = messageIDOf(stream)
3.2.3 headerLengthOf (flujo)
• Obtenga la longitud del encabezado en el protocolo de paquete
• el flujo es de tipo uint8Array, que es una unidad de paquete
• devuelve uint32
var headerLength = headerLengthOf(stream)
3.2.4 headerOf (flujo)
• Obtener el encabezado en el protocolo de paquetes
• el flujo es de tipo uint8Array, que es una unidad de paquete
• objeto de retorno {}
var header = headerOf(stream)
3.2.5 urlPatternOf (flujo)
• Obtener la longitud del encabezado en el protocolo del paquete.
• El flujo es de tipo uint8Array, que es una unidad de paquete.
• Cadena de retorno.
var urlPattern = urlPatternOf(stream)
3.2.6 bodyLengthOf (flujo)
• Obtenga la longitud del cuerpo en el protocolo de paquete
• el flujo es de tipo uint8Array, que es una unidad de paquete
• devuelve uint32
var bodyLength = bodyLengthOf(stream)
3.2.7 bodyOf (flujo)
• Obtener el cuerpo en el protocolo de paquete
• el flujo es de tipo uint8Array, que es una unidad de paquete
• objeto de retorno {}
var body = bodyOf(stream)