阅读更多

25顶
1踩

Web前端

原创新闻 Gmail客户端详细架构之一

2008-06-16 14:49 by 副主编 QQbyte 评论(15) 有19657人浏览
Gmail是最好的web应用之一,这篇文章开始详细分析Gmail客户端的架构。

首先加载JavaScript file
https://mail.google.com/mail?view=page&name=browser&ver=1k96igf4806cy  


首先用js来检验客户端用的是什么浏览器,navigator.userAgent.toLowerCase()函数得出是以下哪种浏览器:opera, msie,mac,gecko,safari,palmsource,regking,windows ce,avantgo,stb,pda; sony/com2。Script 2计算加载一个象素的时间,用来测试客户的网络速度。
   function GetRoundtripTimeFunction(start)  
   {  
     return function()  
     {  
     var end = (new Date()).getTime();  
     SetGmailCookie(”GMAIL_RTT”, (end - start));  
     
     }  
   }  

gmail使用iframe,这个script确认加载正确的home page
top.location = self.location.href
 

同时写入cookie,确认使用的是哪个google services。然后显示登录页面。



Script 3 请求https链接,设置安全登录cookie

 https://www.google.com/accounts/ServiceLoginAuth?service=mail 

登录成功显示正常google帐户页面。 service=mail 参数表示登录的是gmail服务。
location.replace(”http://www.google.co.in/accounts/SetSID?……etc etc”);


记录session和设置登录cookies后,页面http://mail.google.com/mail 自动加载:
<meta content=”0;URL=http://mail.google.com/mail/” http-equiv=”Refresh”/> 


当加载mail页面,差不多有 28 个ajax 请求传送加载mail内容,labels标签,频道等。第一个 DIV tag 是用来显示"loading..." 信息.

当 Ajax 请求传送,同时有一个计时器计算加载时间,如果超过预期时间,将会显示: "This seems to be taking longer than usual" 同时提供一个简单HTML版本链接。

Gmail 用户界面由以下 iFrames 组成:
    * HIST_IFRAME
    * SOUND_IFRAME
    * CANVAS_IFRAME
    * JS_IFRAME

SOUND_IFRAME 用来加载一个flash对象提供音频服务,当用户使用gmail聊天服务时。


<embed id=”flash_object” type=”application/x-shockwave-flash” pluginspage=”http://www.macromedia.com/go/getflashplayer” quality=”high” style=”position: absolute; top: 0px; left: 0px; height: 100px; width: 100px;” src=”im/sound.swf”/> 


Gmail 记录每个部分,标签,mails等,emails使用数组,每个mail有一个唯一的id,这个唯一id被ajax查看和更新使用。例如:

http://mail.google.com/mail/?ui=2&ik=42e598c952&view=tl&start=50&num=70&auto=1&ari=120&rt=j&search=inbox  


以上url和图片都作为一个javascript数组来调用,你可以登录你的gmail查看一下,你的标签,你受到的emails,你的设置,你的最新的70封email等等,都是通过Javascript数组编码。gmail总是这样调用:

http://mail.google.com/mail/channel/bind?at=xn3j2zpul6ptan694kr6javrldi43s&VER=6&it=93079&SID=584B451AB93DBDC&RID=16351&zx=lniy7w-6psisw&t=1  


如果通过Post方式自动远程有更新,请求url和上面类似:

http://mail.google.com/mail/?ui=2&ik=42e598c952&view=tl&start=0&num=70&auto=1&ari=120&rt=j&search=inbox  


如果得到新的数据,新的数据同样通过javascript数组加载。无论你打开哪封邮件,浏览器始终同时发送广告代码:

http://mail.google.com/mail/?ui=2&ik=42e598c952&view=ad&th=118e57dc03d67f16&search=inbox 


CANVAS_IFRAME 是 main iframe ,调用所有的布局元素,组成gmail界面:包含左侧的聊天部分,收件箱,打开邮件,广告部分等。左侧使用HTML table创建,JS_IFRAME 包含所有的javascripts文件,总共有89 个js文件。



如果你和某人聊天,请求的url是:
http://mail.google.com/mail/channel/bind?at=xn3j2zpul6ptan694kr6javrldi43s&VER=6&it=891&SID=7D4E9A779225DC1&RID=50595&zx=hrsqkf-nwummu&t=1  


通过Post函数发送以下参数:

  
req2_text <your chat>  
   req2_to <sender’s email address>  
   req0_type cf  
   req1_cmd a  
   req0_focused 1  
      
    http://mail.google.com/mail/channel/bind?at=xn3j2zpul6ptan694kr6javrldi43s&VER=6&it=531&RID=rpc&SID=48DD6BA8E1D3A326&CI=1&AID=176&TYPE=xmlhttp&zx=m0iiwn-ok5jqr&t=1 


现在,上面的url返回给你聊天的朋友列表,以及他们的状态,使用同样url得到聊天信息,比如当 kenney.jacob@gmail和我聊天,消息数组通过这样的方式发送:

[184,[”m”,”kenney.jacob@gmail.com”,”730DFDF6F013F640_161″,”active”,”hi da”,”hi da”,1206444193169,   
   2. ,,0,0,0,0,[],”square”] 


这里有一个提示聊天是活动的或者不是,通过以下url:
http://mail.google.com/mail/channel/test?at=xn3j2zpul6ptan694kr6javrldi43s&VER=6&it=24343&MODE=init&zx=1vyx51-ze670&t=1  


返回数组类似下面:
[”b”,”chatenabled”]  
来自: dzone.com
25
1
评论 共 15 条 请登录后发表评论
15 楼 gembler 2009-01-15 23:01
admin_cy 写道

好久没接触JAVA 要好好恶补下了哈!

你是打漏了script?
14 楼 sp42 2008-07-23 00:19
gmail还未用json?
13 楼 abo 2008-06-19 07:06


是不是用iframe后就可以使用超过2个的到http服务器的连接?
12 楼 admin_cy 2008-06-18 22:48
好久没接触JAVA 要好好恶补下了哈!
11 楼 wangjinpeng 2008-06-18 11:51
针对你的gmail构架详细,接下来我也来一篇关于gmail基于贝叶斯协议的cometd通信,来讨论下gmail里channel的subscribe,publish和json的通信,楼上的gmail的xmpp通信是在gateway层,在cometd server和thin client之间是采用的是gmail自己定义的json,这样可以减少通信量和提供更多样化的服务。
10 楼 liudaoru 2008-06-17 12:57
gmail使用该是本地逻辑结构+JSON数据交换
9 楼 lyxh_2003 2008-06-17 12:42
好文章。。。。
8 楼 badqiu 2008-06-17 09:20
gmail使用的是xmpp协议,接收服务器的消息是使用comet技术!
7 楼 jvincent 2008-06-16 22:19
gmail是GWT做的...
6 楼 sheva.wen 2008-06-16 21:06
GMAIL应该不是GWT
5 楼 nihlathaks 2008-06-16 20:39
非常的不错 期待下集
4 楼 sp42 2008-06-16 18:49
不错哦~已收藏
3 楼 youngycye 2008-06-16 18:45
很不错,希望继续。
2 楼 soci 2008-06-16 16:09
不错 ,不过GMAIL的JS是GWT生成的吧
1 楼 gml520 2008-06-16 15:40
很不错!学习了@!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 介绍corba使用和java的集成

    详细介绍corba的使用,与java的集成

  • CORBA与Java结合,小试一把

    步骤一,创建一个IDL文件,此处命名为:firstcorba.idl 内容如下: module cn{ interface Test{ string getName(); }; }; 注意:此处module相当于java中的包结构,表示该IDL文件编译后放置在cn文件夹下,大括号后面的“;”必不可少。切记!! 步骤...

  • java corba_Java编写CORBA的一个简单例子(CORBA入门)

    最近写毕业论文学习CORBA,看了几天的理论.今天在网上搜了个HelloCORBA的小程序,调试了一下,弄明白了一些概念和原理.人的记忆力是有限的,特开博将过程写下来.供以后参考.写一个CORBA程序的步骤:1.编写IDL接口定义文件;2.将接口定义文件编译为相应高级语言源代码,产生服务器框架与客户端存根;3.基于服务器框架,编写服务对象实现程序;4.基于客户端存根,编写客户对象调用程序;5...

  • Corba开发之基于Java实现Service与Client

    1      概述 CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)是由OMG组织制订的一种标准的面向对象应用程 序体系规范。或者说 CORBA体系结构是OMG为解决分布式处理环境(DCE)中,硬件和软件系统的互连而提出的一种解决方案。 OMG:Object Management Group,对象管理组织。是一个国际化的

  • java corba_Java基础系列之六:CORBA入门示例

    1.概述CORBA: Common Object Request Broker Architecture。CORBA是一套标准,包含了相关的API以及通信协议的定义,开发者据此可以实现一种与WebService类似的远程调用机制。我直观地认为,CORBA程序的运行涉及3个进程:1)Server进程通常时持续运行的,在运行之初它会将对象注册到2);2)Name Service存放着不同的对象引用,这...

  • Java与CORBA技术结合的前景展望

    随着Internet、Intranet及Extranet在全球范围内的普及和发展,下一代的Web必须能够处理企业-企业(business-to- business)交易和客户-企业(consumer-to-business)多步骤交易过程中的复杂需求。为了实现这一目的,Web必须发展成为一种能够执行在线交易软件的一种成熟的客户机/服务器结构。现在的HTTP/CGI结构存在一些不足,它不能满足上述这...

  • .Java版CORBA程序

    1.题目名称 &lt;1&gt;题目1.Java版CORBA程序1——HelloWorld: (1)编写IDL接口HelloWorld.idl (2)编译IDL接口:X:\corba&gt;idlj –fall HelloWorld.idl,编译结果生成sample包 (3)编写并编译服务端程序:HelloWorldServer.java (4)编写并编译客户端程序: HelloWorldClie...

  • Java基础系列之六:CORBA入门示例

    1. 概述 CORBA: Common Object Request Broker Architecture。 CORBA是一套标准,包含了相关的API以及通信协议的定义,开发者据此可以实现一种与WebService类似的远程调用机制。   我直观地认为,CORBA程序的运行涉及3个进程: 1)Server进程通常时持续运行的,在运行之初它会将对象注册到2); 2)Name Servi...

  • Java corba 实例

    .NET 和 Java 在技术布局上非常类似,.NET 的远程调用经历了DCOM,.NET Remoting,最后是几乎成了.NET 平台SOA代名词的WCF.WCF的目标在于通过一种通用简单的协议来实现通信,即SOAP。WebService的理念的兴起给远程调用,分布式系统的设计带来了很多新的思想。在互联网出现之后,REST 的架构模式下,.NET 上有ASP.NET WebApi ,使用比WC

  • java corba_Java Corba

    1)首先要熟悉idl语言,这个是专门进行接口设计的语言,它与java没关系,有自己的语法,具体的规则需要大家自己再网上研究,这里不多说了(或者访问如下网站详细察看http://www.iona.com/support/docs/manuals/orbix/33/html/orbix33cxx_pguide/IDL.html)。module HelloApp{interface Hello{stri...

  • Java Corba实例

    下载并设置java platform这里就不详细讲了。这里以一个java的corba实例说明corba这种c-s结构的程序的实现。NB:这篇文章虽然是用java语言写的,但是由于corba的多语言特性,idl文件即可以用java编译器编译,也可以使用其他支持corba的语言编译例如c#.  把以下的java 格式改成c#风格照样可以使用。而且c-s没什么联系,你也可以用c#写server,用jav

  • java实现CORBA

    1.      利用CORBA实现数据的访问,也就是通过客户端的代码,访问服务器端的代码。首先是定义一个idl文件,里面的主要类型就是定义一个接口,类容如下: 2.      然后利用idlj –fall DataService.idl 命令来编译idl文件,编译后得到了许多的java文件,文件如下所示: 再然后,在该文件中建立一个Server文件夹,然后将生成的文件放

  • CORBA, DCOM and Java/RMI详细比较

    A Detailed Comparison of CORBA, DCOM and Java/RMI (with specific code examples) Gopalan Suresh Raj Introduction Distributed object computing extends an object-oriented programming system by allowi...

  • 【原創】构建简单的CORBA应用

       JAVA还提供了对CORBA(Common Object Request Broker Architecture,通用对象请求代理体系结构)的支持。CORBA是分布式对象系统的一个标准,它由OMG(Ojbect Management Group,对象管理组)制定。CORBA包含了几个规范,来说明分布式系统的不同侧面,例如:IIOP(Internet Inter-Orb Protocol, I...

  • CORBA 与Java 的 结 合 使 用

    google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//<script type="text/javascript"

  • Java&CORBA编程实例

    Java&CORBA编程实例 Java IDL技术在Java平台上添加了CORBA(Common Object Request Broker Architecture)功能,提供了基于标准的互操作能力和连接性。Java IDL技术使得分布式的Java Web应用能够通过使用工业标准的IDL和IIOP(Internet Inter-ORB Protocol)来透明地调用远程网络服务的操作。运

  • java corba实例,OpenORB开发CORBA的实例介绍

    目录:概述开发步骤创建Java项目,配置Lib创建IDL文件创建服务单创建客户端测试本地调用NamingService命名服务实现远程调用[一]、概述本文主要是图文介绍 Eclipse+OpenORB 开发CORBA应用的详细步骤,以供初学者借鉴。有关Eclipe中CORBA开发环境的配置详见:http://www.micmiu.com/opensource/corba/corba-eclipse...

Global site tag (gtag.js) - Google Analytics