2个不稳定版本
0.5.1 | 2024年3月8日 |
---|---|
0.4.3 | 2024年3月1日 |
10 在 #presentation
每月60次下载
17KB
303 行
BQSP
Box Queue Streaming Protocol
关于
BQSP是一种表示层协议,用于通过任何字节流以快速和高效的方式传输数据。
主要方面是使用队列。每个有效负载可以分配一个特定的队列号,然后可以被应用程序并行处理。
例如,如果客户端同时发送2个请求,每个请求具有不同的队列号,服务器可以并行执行它们。即使第二个到达的请求先被处理,服务器也可以发送具有相同队列号的响应,因此客户端可以知道哪个响应应与哪个请求关联。
BQSP是在"Hangin!"应用程序中创建的,旨在减少网络使用并提高用户体验。
数据包
在BQSP的术语中,“数据包”是包含头和有效负载/数据的完整结构。
<PACKET> = [HEADER] + [DATA]
头
此结构包含处理有效负载/数据所需的所有元数据。
头由以下部分组成
数据大小
(4字节) - 有效负载/数据的大小数据类型
(2字节) - 有效负载/数据的类型队列
(1字节) - 队列号
头以LittleEndian表示,因此一个示例头可能看起来像这样
Data Size: 16 (0x10) [10, 0, 0, 0]
Data Type: 43775 (0xAAFF) [FF, AA]
Queue: 1 (0x1) [1]
-------------------------------------------
[10, 0, 0, 0, FF, AA, 1]
有效负载/数据
在头之后接受任何数据。
为了使另一端知道发送了什么类型的数据,在数据包的头中使用数据类型属性是一个好主意。
例如,如果以下JSON是有效负载/数据
{"status":"ok"}
并且用于表示数据类型的枚举如下
#[repr(u16)]
enum MyDataType {
Unknown = 0,
Text = 1,
JSON = 2,
}
整个数据包将如下所示
Data Size: 15 (0xF) [F, 0, 0, 0]
Data Type: 2 (0x2) [2, 0]
Queue: 1 (0x1) [1]
-------------------------------------------
[F, 0, 0, 0, 2, 0, 1, 7B, 22, 73, 74, 61, 74, 75, 73, 22, 3A, 22, 6F, 6B, 22, 7D]
当前状态
BQSP已准备就绪,但该包本身缺少许多功能、优化和适当的文档。
队列和数据类型由实现协议的系统以及应用程序的需求决定。BQSP是发送和接收数据的方式,而不是处理或验证数据的方式。
一个数据包中有效负载/数据的最大长度为4_294_967_295 字节
,约等于4.29 GB
,但一次性发送如此大量的数据并不建议。最好是将其分成更小的数据包。
许可证
盒队列流协议 采用 CC BY 4.0 许可。
依赖项
~0–1.2MB
~20K SLoC