WebRTC dataChannel分析(iOS&&Android)

iOS实现:

1、有序的dataChannel

有序的dataChannel会有包依赖,上一个包未发送成功,下一个包会等待知道上一个包成功

2、无序的dataChannel

无序的dataChannel没有包依赖,所有的包都是无序发送,不需要等待上一个包的状态

以上两种方式都有经过抓包、打印LOG验证过。

在iOS上dataChannel的初始化是全局的,一旦定义了order类型,就会导致所有的消息投递都是该类型,但平时开发中不同的业务消息可能需要的类型不一样,例如我们当前有个业务就是做心跳包保活就需要用到无序,心跳需要实时性,用有序的容易出现上一个心跳还没投递出去,下一个心跳一直等待导致容易心跳超时。故此需要拓展接口,每个消息投递都可以自定义投递类型,更改如下所示:

总体走向如下:RTCDataChannel->SctpDataChannel->SctpDataChannelTransport:;CreateSctpSendParams->UsrsctpTransport::SendMessageInternal::usrsctp_sendv

RTCDataChannel添加拓展方法:- (BOOL)sendData:(RTCDataBuffer*)dataisOrdered:(BOOL)isOrdered

在基类(DataChannelInterface)添加实现方法:

virtual bool CustomSend(constDataBuffer& buffer,boolisOrdered) {

        printf("CustomSend Not Excute");

        return0;

    }

在sctp_data_channel添加PROXY_METHOD2(bool, CustomSend,constDataBuffer&,bool)不然会调用不到

在sctp_data_channel重写CustomSend来实现消息投递,如下所示:


至此整个流程完成,也就实现的不同的消息类型可以支持不同的order

Android:后续抽时间整理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容