当前位置: 首页 > news >正文

libjingle翻译之《Important Concepts(重要概念)之Transports, Channels, and Connections(传输、通道、链接)》...

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子类的实例。

相关文章:

  • [转载]WCF系列_分布式事务(下)
  • EF基础知识小记五(一对多、多对多处理)
  • 智能语音控制中心 - 树莓派、Nanopi、Orangepi语音识别控制
  • NFS启动时报错Linux NFS:could not open connection for tcp6
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 性能与性价比的平衡,阿里云第二代入门级实例T5详解
  • 13个绚丽的Jquery 界面设计
  • 20162321王彪 2017-2018《程序设计与数据结构》第五周学习总结
  • 剪我一根头发,就要做我一天女人。
  • VS2008 F5不能调试情况一例
  • 短路径算法-Dijkstra算法的应用之单词转换(词梯问题)
  • C++多线程中调用python api函数
  • Gridview的footer模板中放置控件实现添加功能
  • 如何更高效地使用 OkHttp
  • BZOJ-3713[PA2014]Iloczyn
  • css布局,左右固定中间自适应实现
  • IOS评论框不贴底(ios12新bug)
  • js写一个简单的选项卡
  • vue中实现单选
  • 初识MongoDB分片
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 前端存储 - localStorage
  • 探索 JS 中的模块化
  • 移动端解决方案学习记录
  • nb
  • Hibernate主键生成策略及选择
  • mysql面试题分组并合并列
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 如何用纯 CSS 创作一个货车 loader
  • ​插件化DPI在商用WIFI中的价值
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #ifdef 的技巧用法
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • ()、[]、{}、(())、[[]]命令替换
  • (C语言)逆序输出字符串
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (顺序)容器的好伴侣 --- 容器适配器
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • .form文件_SSM框架文件上传篇
  • .net core使用ef 6
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .Net中wcf服务生成及调用
  • .sh
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑