• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

会点儿code

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

远程协助小结

大家用远程协助恐怕大部分都是通过主流IM如QQ、阿里旺旺。现在网络上也可以找到一些独立的远程协助工具。

最近两个月的时间一直在接触远程协助,对网络方面的了解也从一窍不通变为略懂。具体的原理网络上都有介绍,这里做一下简单的总结。

 

【控制前的协商】

不管是想要协助别人或者邀请别人来协助自己,一般都需要经过对方的确认,这里需要一个协商的过程。

首先客户端都需要登录到服务器,服务器给每个登录用户分配一个唯一的ID。

此时客户端之间是没有直连接的(到最后也不一定有),所以协商需要登录服务器来协助完成。

发起方发送的消息中需要包含接收方的ID,服务器转发消息给接收方。接收方响应邀请的时候同理。

这个协商过程是可以有用户界面弹出可供用户操作的,也可以是隐藏的,视具体的业务设计而定。

 

【建立P2P连接】

如果双方都确认了本次远程协助,协商顺利达成,则接下来要建立P2P的连接,根据双方的网络环境分不同的情况。

当然客户端P1通常情况下无法知道自己和另一台客户端P2的拓扑关系,所以按照连接速度从快到慢逐级尝试创建连接:

1. 尝试局域网内直连接

    双方需要通过服务器告知对方自己的局域网IP。只有当双方处于同一局域网内时可以成功建立这种连接。

2. 尝试NAT穿透

    如果方法1行不通,则很可能有一台以上的客户端是在NAT后面的。

    此时双方可以从服务器请求对方的NAT IP,并往对方的NAT IP发一个UDP包,即可实现NAT穿透。

    IP穿透成功后也可以建立起直连接。

3. 服务器中转

    如果方法2行不通,则很可能有一台以上客户端的NAT不允许IP穿透。

    此时双方可以分别跟一台有公网IP的服务器建立起直连接,通过服务器来中转数据。

 

【控制原理】

QQ的远程协助中,“发起方”是被人控制的那一方,但是并不是必须的,同样是需要根据业务来设计。

所以下面是用“控制方”和“被控方”来表示两个客户端,而不是“发起方”和“接收方”。

1. 被控方需要定时截取桌面图像传输给控制方,控制方在控制窗口展示该图像。

    为了让控制方获得流畅的控制体验,图像传输的优化尤为关键。如可以奖本次要发送的图像跟上次已经发送的图像做一个对比,去除相同部分。

    旺旺远程协助提供了3种不同的图像模式,有灰度、标准、高清。这几种模式分别对应不同的图像BPP和压缩算法。

    低BPP和有损压缩能够换取流畅的控制体验,但是控制方看到的图像会略显粗糙。

    相反高BPP和无损压缩能够让控制方看到清晰及色彩丰富的图像,但是对于网络速度不是非常快的环境,控制方会感到控制起来很吃力。

2. 控制方需要HOOK鼠标、键盘事件,如果当前激活窗口为控制窗口,则将事件发送给被控方。

    在被控方模拟这些事件。

 

【协议】

远程协助中需要实时传输桌面图像,使用的协议一般是RUDP。

使用RUDP的优势是,即能在速度上优于TCP,又能在可靠性上优于UDP,比如它基于UDP增加了重发机制和拥塞控制算法。

当然如果是在局域网内则使用TCP或者UDP协议也无妨。

 

很长一段时间不敢提笔写博文,因为一直觉得如果自己对于某项技术理解不够透彻和全面,拿出来分享给大家就没有什么价值。

但是平时通常是以解决某一问题而开始研究某一新鲜事物,等问题解决了就会马上投身到其他新问题上,也就没有足够的时间精力达到自己所期望的“理解透彻”。

这种写博心态往往让我错过了最佳的总结时期,所以现在觉得不管理解多少都先写下来,做一个积累。这样以后就可以快速地重新进入到老问题的某个细节中。

 

其实我更希望的是能够得到博友的指点,帮助我快速提升。

所以,欢迎各种拍砖~

posted on 2011-06-18 13:36  曹某  阅读(737)  评论(1)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3