libjingle源码分析之三:P2P

  • 摘要

        本文主要介绍了libjingle库中的P2P模块。

  • 概述

        在libjingle中,P2P模块并非一个完全独立的模块,它的实现依赖于Jingle协议,需要通过libjingle中的其它模块获取必要的信息和支持。P2P模块的内部结构及与其它模块的关系如下图所示。


        如前文所示,SocketServer模块是用来管理socket的服务端,并且通过Dispather来分发数据。它的一个实现是PhysicalSocketServer和SocketDispatcher。SocketDispatcher有两重身份,既是Dispatcher、又是PhysicalSocket(可以理解为一个真正的用来通信的socket),这样SocketDispatcher可以作为分发器和SocketServer相连,又可以作为socket向P2P模块提供支持。
        P2P模块可以理解为一个连接器,屏蔽了底层的连接细节,提供了socket连接所需要的连接参数(本地和远程的ip地址和端口号等),同时也可以管理所有与远程的连接。上图中的双向箭头代表了数据的传输通道。当有数据接收到时,先传递到SocketServer模块,然后经过P2P模块,最后达到其它模块中。若发送数据的话,采用相反的顺序即可。
        P2P模块内部又分有如下几个模块,它们被包含在P2PTransportChannel类中,作为一个TransportChannel来接收和发送数据。
        Socket:封装了PhysicalSocket。
        NetWork:代表了一个本地连接,相当于本地连接的配置信息。win7中对应于“控制面板\网络和 Internet\网络连接”。
        Port:代表了本地的一个开放的端口。它和本地的不同的ip地址组合成不同的服务端口。每个端口可以和远程的多个端口对应。
        Connection:代表的是一对一的本地和远程端口的连接。同一个远程端口,可能会有多个连接,P2P内部会选择一个最优的连接来传输数据。
        Candidate:代表的是一个远程端,包含了ip地址和端口号。这个信息是通过libjingle中Session和Transport模块获得,后续会分析这两个模块。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值