-
Notifications
You must be signed in to change notification settings - Fork 16
WireProtocol
重归混沌 edited this page Mar 6, 2017
·
7 revisions
silly核心代码不提供网络数据组包功能。这也意味着它对你的你的网络协议设计没有任何限制,你可以在在应用层用任何你喜欢的方式进行数据组装。但基于功能完整性,silly还是提供了netpacket和netstream两种数据组装方式。
netpacket主要用于数据打包及组装,netpacket的定义的wire protocol如下:
- 每一个完整的数据包分为两个部分:包头(head)和内容(body)。
- head为字节序为大端的uint16_t类型,用于指明后面body的长度
- body为head指明长度的一块二进制内存数据
以C语言的数据结构来举个例子:
char data[] = "hello";
//data经过netpacket打包完成后的数据如下:
00:07 00 05 'h' 'e' 'l' 'l' 'o'
netstream并不进行数据组装,它会将所有收到的数据缓存起来,然后提供两组接口供外部程序调用:
- 读取指定长度的数据
- 读取所有数据直到碰到特定字符串才会停止(一般被用来读取一行)
netpacket被使用在rpc.lua模块中,用作组包和打包, 而netstream则被用在socket.lua模块中做缓冲区使用。