Table of Contents generated with DocToc
1. 包协议2. 相关操作
2.1 大端编码2.2 大端解码2.3 string转utf8-uint8Array[], utf8-uint8Array转string2.4 json序列化2.5 uint8Array拼接和读取 3. js-api
3.1 编码
3.1.1 pack(messageID, header, body)3.1.2 packURL(urlPattern, body)3.1.3 packSerialURL(urlPattern, body)3.1.4 packPipeURL(params) 3.2解码
3.2.1 lengthOf(stream)3.2.2 messageIDOf(stream)3.2.3 headerLengthOf(stream)3.2.4 headerOf(stream)3.2.5 urlPatternOf(stream)3.2.6 bodyLengthOf(stream)3.2.7 bodyOf(stream)
1. 包协议
2. 相关操作
2.1 大端编码
将uint32的数字,转变成[4]byte。 []byte对应js里的uint8Array
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 大端解码
function daduanjiema(params
) {
const buf
= Buffer
.from(params
);
return buf
.readUInt32BE(0)
}
2.3 string转utf8-uint8Array[], utf8-uint8Array转string
对header,body这样的文本结构,需要使用utf8转换器,因为js默认的是utf16.
function encodeUTF8(params
) {
var encoder
= new TextEncoder('utf-8')
var buf
= encoder
.encode(params
)
return buf
}
func
decodeUTF8UintArray(params
) {
var decoder
= new TextDecoder('utf-8')
var jsonStr
= decoder
.decode(params
)
return jsonStr
}
2.4 json序列化
var jsonobj
= {'name': 'ft'}
var jsonstr
= JSON.stringify(jsonobj
)
var obj
= JSON.parse(jsonstr
)
2.5 uint8Array拼接和读取
var concatArray
= new Uint8Array([...xulieLength
,...messageId
])
var headerLengthBytes
= new Uint8Array(buffer
, 8, 4);
3. js-api
地址: http://www.baidu.com, 待更
3.1 编码
3.1.1 pack(messageID, header, body)
编码全部,使用示例:
pack(0, {
Router
-Type
:'URL_PATTERN',
URL-Pattern
-Value
: '/user-pool/kf-user-info/login/',
}, {
chanel
: 'web
,
})
3.1.2 packURL(urlPattern, body)
等价于
pack(0, {
Router
-Type
:'URL_PATTERN',
URL-Pattern
-Value
: urlPattern
,
}, body
)
示例:
packURL('/user-pool/kf-user-info/login/', {chanel
: 'web'})
3.1.3 packSerialURL(urlPattern, body)
发送的消息将被串行处理,该消息处理完毕以前,后续的消息会等待。一般应用于登录,鉴权,验证等。等价于
pack(2020, {
Router
-Type
:'URL_PATTERN',
URL-Pattern
-Value
: urlPattern
,
}, body
)
示例:
packSerialURL('/user-pool/kf-user-info/login/', {chanel
: 'web'})
3.1.4 packPipeURL(params)
该串消息,将会同步按顺序执行,并且,params里的消息集互为串行,和其他的消息为并行。
params格式为
:
[
{
urlPattern
: '/user-pool/kf-user-info/login/',
body
: {chanel
: 'web'}
},
{
urlPattern
: '/user-pool/kf-user-info/login/',
body
: {chanel
: 'web'}
},
]
3.2解码
3.2.1 lengthOf(stream)
• 获取#1的包协议中length,它比一个包协议长度少4 • stream 是 uint8Array类型,为一个包单位 • 返回uint32
var l
= lengthOf(stream
)
3.2.2 messageIDOf(stream)
• 获取包协议中的消息号 • stream是uint8Array类型,为一个包单位 • 返回uint32
var messageID
= messageIDOf(stream
)
3.2.3 headerLengthOf(stream)
• 获取包协议中的头部长度 • stream是uint8Array类型,为一个包单位 • 返回uint32
var headerLength
= headerLengthOf(stream
)
3.2.4 headerOf(stream)
• 获取包协议中的头部 • stream是uint8Array类型,为一个包单位 • 返回对象{}
var header
= headerOf(stream
)
3.2.5 urlPatternOf(stream)
• 获取包协议中的头部长度 • stream是uint8Array类型,为一个包单位 • 返回string
var urlPattern
= urlPatternOf(stream
)
3.2.6 bodyLengthOf(stream)
• 获取包协议中的body长度 • stream是uint8Array类型,为一个包单位 • 返回uint32
var bodyLength
= bodyLengthOf(stream
)
3.2.7 bodyOf(stream)
• 获取包协议中的body • stream是uint8Array类型,为一个包单位 • 返回对象{}
var body
= bodyOf(stream
)