前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >内容传输自定义协议

内容传输自定义协议

作者头像
蛋蛋编程手记
发布2023-02-25 17:01:12
3560
发布2023-02-25 17:01:12
举报
文章被收录于专栏:蛋蛋编程手记蛋蛋编程手记

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

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

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

消息类型(1字节)

描述信息长度(4字节)

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

文件流长度(4字节)

文件流(文件流长度) ​

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

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

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

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

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

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

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 蛋蛋编程手记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档