内容传输自定义协议

2023-02-25 17:01:12 浏览数 (3)

上文《webrtc点对点文件传输》讲到,利用socket进行文件传输的时候,除了需要传输文件流,还需要传输文件的描述信息,例如文件名称等等。

在这种需求下,最好的方法就是自定义协议,发送方按照一定的格式将文件流和文件描述信息编码成字节流,接收方把收到的字节流在解析成文件流和文件描述信息。

这里蛋蛋给出一个简单的协议格式。

消息类型(1字节)

描述信息长度(4字节)

描述信息(描述信息长度)

文件流长度(4字节)

文件流(文件流长度) ​

发送方按照上述协议进行编码。

接收方收到了字节流后按照上述协议解析。

1. 首先根据第一个字节来判断消息类型,例如0表示普通消息,1表示文件消息。

2. 然后读取4个字节数据转成数字得到描述信息长度

3. 然后根据第2步的长度读取描述信息

4. 读取4个字节的文件长度

5. 根据第4步的文件长度读取文件流

最后说一下,这个协议有几个很大的局限性。

首先长度信息限制在了4个字节的范围内,所以不能超过2^32次方,也就是说内容长度不能超过大概4个g。如果有更大的需求那就需要使用更多的字节来描述长度。

其次它需要保证总的消息长度不能超过256k(因为rtcDataChannel有限制),如果超过了这个,就需要把整个消息分成不同的块传输。当消息分块传输就会带来消息顺序性,消息幂等性,消息完整性等其他限制和要求。

0 人点赞