博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
libjingle翻译之《Important Concepts(重要概念)之Transports, Channels, and Connections(传输、通道、链接)》...
阅读量:6189 次
发布时间:2019-06-21

本文共 1205 字,大约阅读时间需要 4 分钟。

Transports, Channels, and Connections(传输、通道、链接)

每个p2pTransportChannel代表了本地机与远程机的数据通道。这个通道实际上包含着(隐藏着)一个设计复杂而健壮的体系。P2PTransportChannel管理着大量的不同的Connection对象,每个对象代表了一个不同种类的链接(UDPTCP等)。一个Connection对象实际上封装了一对对象:一个Port子类,代表了本地链接,和一个代表远程机的地址。如果一个链接无效,P2pTransportChannel会立即切换到下个最佳的链接上(即从候选链接中选一个最佳的)。

 

libjingle和远程机协商一个链接时,libjingle就会在本地创建一个链表,用来储存所有潜在链接点,这潜在的链接点称作“candidates”(候选),本地的每个候选被一个Port对象封装,此Port对象被PortAllocator子类分配。本地的Port对象是在发起方在发送链接请求之前被创建,或接收方收到一个链接请求后被创建(如果Port对象链表己经被生成,不论这个链表是怎么创建的,只要有就行)。当P2PTransportChannel收到另外一个计算机的链接请求,它就会创建一个Connection对象来封装每个“远程候选/本地Port对象”对。

libjingle还定义了一个RawTransport类,此类支持UDP两端的直接链接(在不使用ICE的情况下)。这样的传输方式(链接方式)也许在能够创建UDP直连条件下或UDP的任何一方不支持ICE机制下被使用。

P2PTtransportChannel 创建和管理多个Connection对象。P2PtransportChannel根据可写入性和优先级(比如:UDP的优级先比中转链接的高)来选择最佳的Connection对象使用。

当链接异常中断或性能低下时,上述情况就会随之发生,P2PTransportChannel立刻会切换到下一个Connection对象上,并且这种切换对上层是透明的。

P2PTransport(图中未显示)是p2p数据体系上的抽象度较高的创建者和管理者。它创建和管理P2PTransportChannel,并且监视它的性能,但是实际上P2PTransport不处理数据;数据的真正进入点是P2PTransportChannelVoiceChannelPseudoTcpChannel都关联到了P2PTransportChannel进行数据的读取和写入。

Session对象掌管着P2PTransport对象,所以可以要求P2PTransport创建数据通道。尽管Session对象有掌管多个TransportTransport子类实例的潜力,但是当前版本的代码只定义和使用了一个P2PTransport子类的实例。

转载地址:http://itlda.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
23种JAVA设计模式(3)-结构模式
查看>>
php采集远程图片保存到本地
查看>>
nginx-php上传文件大小设置
查看>>
解决"win8"无法使用内置管理员账户打开
查看>>
mockjs使用笔记
查看>>
为什么df和du看到的数据量不一样?
查看>>
分享一个301转址代码
查看>>
[新手学Go]GO语言实现冒泡排序
查看>>
Immutable-不变模式与不变类-二版
查看>>
WordPress代码实现相关文章的几种方法
查看>>
Python 从字典取值—dict.get()
查看>>
VMWare 的‘地平线移动’
查看>>
WinForm禁用横向/纵向滚动条
查看>>
rulebook规则引擎示例
查看>>
使用C++绘制不规则的窗体
查看>>
(四)Flask 学习 —— 数据库
查看>>
类切换 与 __init__参数自动初始化实例变量
查看>>
jquery点击事件测试
查看>>
Nginx+Apache实现网页动静分离
查看>>