即时通信与浏览器多TAB通信

标签: 贴吧技术 即时通信 浏览器 跨页面通信 | 发表时间:2011-06-23 19:51 | 作者:editor blankyao
出处:http://stblog.baidu-tech.com

摘要

浏览器与服务器端的即时通信技术解决了在线聊天等产品中涉及到的复杂网络环境下的问题;采用多tab通信技术来处理现代浏览器的跨页面通信,分析特定疑难问题的技术解决方案。

TAG

即时通信,多tab通信

内容

关键技术

  1. 消息推送:通过基于web server的长连接技术实现
  2. 前端多Tab数据交互:借助Flash的Local Connection和ShareObject技术实现

Client-Server交互模型

分层设计

多Tab通信技术

  • 主要功能:

1.多Tab中始终维持一个特立独行的Tab

2.多Tab间互相通信:支持广播、组播、单播

3.跨浏览器数据存储

4.跨域发送Http请求

利用flash的LocalConnection的唯一性保证客户端多个浏览器多个tab之间,有且只有一个页面与服务端交互,称之为server tab。

只有server tab会与Lightthy通信

当server tab接收到lightthy的消息后,从本地存储SharedObject中获取其他tab的id,然后通过LocalConnection传递给他们。

遇到的问题和解决方案

问题:

  • 通信时间过长的问题。LocalConnection构造的本地连接都是以串行的形式进行,每一次连接到用户的电脑上,机器状态正常的情况下,在IE的传输时间大概是40-100ms;下一次连接必须等待上一次连接返回成功以后才进行。那么如果我们进行广播,一次广播20个窗口。那么最后一个窗口收到消息的时候大概是2s左右,如果中间再出现某此失败或者阻塞的情况,时间会更长。
  • 单纯以广播形式进行,那么无论是什么消息,都将所有接收端叫醒一次,由接收端自己判断是否处理收到的消息。这样浪费了很多资源。所以可以考虑使用组播方式,来减少这种消耗。组内单播针对一些特殊具体应用的效率更高。

解决方案:

  • 存储接收端列表,以组划分。
  • 在本地协议上实现以组划分。

问题:

  • 多页面并发频繁对SharedObject进行写操作,容易导致SharedObject崩溃(文件被无故删除,并且再次创建失败)。
  • 考虑到一台计算机不可能只登陆一个用户,而SharedObject存储容量有限,如果有效的删除无用的数据是关键问题。

解决方案:

  • 机制上用写队列+文件锁来避免并发写操作。
  • 为了避免客户端异常情况,比如强杀浏览器进程,造成的文件锁不能解锁的情况,需要处理超时自动解锁的问题。
  • 对于非常频繁的特殊的写操作,采用从reclist中删除无用的接收者id,做缓冲时间,批量操作等策略。
  • 对于存储空间限制问题,我们的措施是分用户存储,只保留最近进行操作的10个用户的列表数据。

问题:

为了减少服务端压力,设计的初衷就是前端要在多个浏览器窗口中挑出一个独特的窗口来发起listen。Server Tab的概念保证了前端能生成一个唯一的独特窗口,用于发起listen。实现原理是利用LocalConnection的connect name唯一性,并用轮询connect来保证只要原来发起listen的窗口一旦断掉,即能自动重新挑选一个窗口来作为Server Tab,并发起listen。但是我们仍然遇到了外壳浏览器下面一些诡异的问题,窗口被缓存成假死状态。导致这个机制不能很好的运行下去。

解决方案:

  • 将Server Tab的ID做成非永久的,而是与时间相关的。也就是说给Server Tab加上一个生命周期。能解决一些外壳浏览器下的窗口假死造成的问题。
  • 在主流浏览器(IE、Firefox…)下,window.unload的时候关闭本页面的server及轮询,在其他非主流浏览器下,window.beforeunload的时候做这个操作。进一步减少这种异常情况发生的机会。

下面是一个窗口打开后,在本地注册的流程

相关 [即时通信 浏览器 tab] 推荐:

即时通信与浏览器多TAB通信

- blankyao - 搜索研发部官方博客
浏览器与服务器端的即时通信技术解决了在线聊天等产品中涉及到的复杂网络环境下的问题;采用多tab通信技术来处理现代浏览器的跨页面通信,分析特定疑难问题的技术解决方案. 消息推送:通过基于web server的长连接技术实现. 前端多Tab数据交互:借助Flash的Local Connection和ShareObject技术实现.

Android 滚动Tab

- - CSDN博客推荐文章
如果对效果感兴趣, 请耐心看完, 其实不复杂.. 需要android-support-v4.jar的支持.. 主布局文件activity_main.xml. 主Activity, 核心是给mViewPager设置一个Adapter--mFragmentAdapter. 接下来看看FragmentAdapter如何实现的..

Silk 浏览器:Google? No!

- 橙子 - 爱范儿 · Beats of Bits
前苹果员工, Blogger Chris Espinosa 指出, Amazon 的 Silk 浏览器技术,让 Amazon 不能把自己置于 Google 的控制之下. Silk 在云端为用户组织和优化网页,之后再下载到本地. 这样做的结果是, Amazon 能掌握用户在网络上的一举一动. 不仅仅包括在 Amazon.com 下的订单.

浏览器检测

- - JavaScript - Web前端 - ITeye博客
1.navigator 对象. 由于每个浏览器都具有自己独到的扩展, 所以在开发阶段来判断浏览器是一个非常重要的步骤. 虽然浏览器开发商在公共接口方面投入了很多精力, 努力的去支持最常用的公共功能;但在现实中,浏览器之间的差异,以及不同浏览器的“怪癖”却是非常多的,因此客户端检测除了是一种补救措施,更是一种行之有效的开发策略.

极客观察:即时通信的移动变革

- Leeall - GeekPark 捕风捉影
本篇极客观察主笔:@jyconan. 即时通讯(Instant Messenger,简称IM)是指通过互联网进行的实时信息发送、接收服务. 这并非什么新奇的应用,早在互联网的初期,即时通讯的功能便已经成形,但受到当时电脑设备和网络普及度的限制,无法供一般人方便使用. 但随着电脑日渐大众化和互联网的普及,人们希望利用这一新兴的介质来进行更方便沟通交流的需求日渐强烈,即时通讯功能开始受到广泛的关注.

即时通信集成服务IM+获1000万美元投资

- - 36氪
即时通讯软件经过十几年发展,当年最火爆的ICQ也早已风光不再,各大互联网公司都先后推出自家的IM软件. 正是在这种背景下,即时通信集成服务 IM+乘着移动互联网的东风异军突起,并于近日获得1000万美元的投资. IM+是一个为移动电话和web提供的内容丰富且易于使用的IM客户端,其移动应用程序同时支持iPhone/iPad、Android、BlackBerry、Windows Mobile、Symbian、Java及WebOS等众多平台.

Ricochet:基于Tor的加密即时通信工具

- - Solidot
22岁的John Brooks在13岁时就缀学了,他是一名自学成才的程序员,关心隐私和公民自由. 四年前,他开始开发使用Tor隐藏服务的加密即时通信程序Ricochet. 到完成之日,他有了一个易于使用的完备桌面客户端,提供了匿名性和加密,甚至在公众意识到之前解决了元数据问题. 唯一的问题是程序只有几个人用,也没有几个人知道.

iriver Tab ILT-MX100平板韩国上市

- [email protected] - Engadget 中国版
此外,ILT-MX100还具备SRS WOW HD环绕音效、FM收音及DMB电视接收功能,韩国地区售价500000韩元(约合人民币3058元),当然是捆绑LG U+的运营商套餐销售. 继续阅读全文 iriver Tab ILT-MX100平板韩国上市. 此文章网址 | 转寄此文章 | 回应.

Samsung Galaxy Tab 10.1 平板搶先試玩

- Felix - T客邦
因為 Samsung 與 Apple 的專利訴訟案,讓 Samsung Galaxy Tab 10.1 在歐洲的上市之路並不順遂,不過在亞洲市場上,已於8月初在香港上市,台灣也在今日舉辦了媒體體驗會,讓這款強調超輕薄的 10吋 Samsung Galaxy Tab 在台亮相. 處理器:NVIDIA Tegra 2 雙核心處理器.

InstantBird – 即时通信软件新秀 | 小众软件 > 网络工具

- 翼翔 - 小众软件 - Appinn
迅鸟(InstantBird)是东里二狗最近迷上的 Win/Lin/Mac 跨平台 IM 客户端,界面清爽如出狱人员的发型,系统资源占用则轻如鸿毛. 软件自带功能紧凑有限,但支持第三方扩展,具有极高可玩性和定制性. 如果你对冷门软件有兴趣,或者只是忍不了 Pidgin 的傻鸟图标,Instantbird 绝对值得一试.