Gleasy内核之在线应用进程间通信技术

声明
本文为Gleasy原创文章,转载请指明引自Gleasy团队博客

一。它有多重要
Gleasy在线应用进程间通信技术为Gleasy最核心技术之一,目前己申批国家发明专利和国际发明专利。它于Gleasy来讲到底有多重要呢,可以简单地说,Gleasy平台内一切看得到的功能都归它管。它就像PC机的主板,负责将各个子系统联系起来,沟通起来。

二。它解决什么问题
在线应用进程间通信技术涵盖两个主要概念,一个是在线应用进程,一个是通信技术。通过这两个概念的字面意思也反映出来,它解决的是在线应用的管理和沟通问题。Gleasy上面运行的一盘,一信,一说,项目管理,美图秀秀等等,全部都是一款款的独立应用。当用户使用Gleasy的时候,这些独立应用如何打开,资源如何加载,如何管理(比如关闭),如何监控,如何调用(比如用美图秀秀打开一盘文件)等等,都是该技术试图解决的问题。

如果你理解Android原理,考虑一个场景:美图秀秀调用了拍照功能得到一幅照片,然后自己编辑,编辑完之后使用新浪微博发出去。这个场景,正是Gleasy进程间通信技术解决的问题。

三。它如何工作

应用进程:应用在Gleasy运行时的存在形态,它可以是一个URL(比如美图秀秀),也可以是JS的类和DOM(比如一盘,一说)。当用户安装某个应用后,就会在注册表(reg.js)中生成注册项,注册项包含了应用的URL或者用于启动的JS类(MAIN函数)。点击图标启动时,GLEASY内核的进程管理器(ProcessManager)会读取注册项,动态加载应用运行时所需的资源(JS等),运行MAIN函数生成应用进程(Process)实例。

进程间通信:应用通过调用进程管理器提供的API来声明自己可以提供的服务(这里的服务是事件名称,比如选择文件服务的事件名称为gcd.file.selector)。调用者通过调用进程管理器的API来调用服务,调用的方法为sendMessageToProcess({pname:”一盘”,eventId:”gcd.file.selector”,messageBody:params});这个API的意思是,调用应用名一盘的应用,事件为”gcd.file.selector”,参数为params。进程管理器会寻找“一盘”这个应用进程,看是否存在,如果不存在,会尝试启动它,启动成功后把事件投递到该进程的消息队列中,一盘应用进程会定时消费在自己消息队列中的消息。从而实现应用间通信。

四。对应用的要求
应用可以完全不关心进程间通信的原理及过程,甚至可以不知道有应用进程的存在。应用开发者只需要按照Gleasy的规范实现若干简单的接口便可提供的能力供他人使用,而不关心调用来源及调用方式。
当需要调用别的应用提供的服务时,也只需要调用Gleasy提供的API将消息发送给目标进程,至于如何发送,如何启动目标应用,都是由进程管理器来完成,对调用方来说只关心一个sendMessageToProcess即可,非常简单方便。

五。一些技术依赖
由于Gleasy上面的应用可能是运行在其它网站域名之下,不可避免存在跨域问题。
解决跨域问题主要有以下几种途径:
1. 使用Access-Control-Allow-Origin头解决AJAX跨域调用(推荐)

add_header best online casino Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "GET,POST,OPTIONS";
add_header Access-Control-Allow-Headers Content-Type;
add_header Access-Control-Max-Age 86400;

这种方法最为简单方便,无须做任何额外处理便可跨域调用AJAX。
在IE8以上,Chrome,Firefox,Safari的大多数版本都适用。

2. 使用window.postMessage来解决Iframe和主窗口之间的跨域通信(推荐)
这个方法性能好,简单易用。在IE7以上,Chrome,Firefox,Safari的大多数版本都适用。

3. 使用Flash解决Ajax调用的跨域问题(不推荐)
该方法适用于所有安装了flash插件浏览器,缺点是不支持AJAX的一些特性,而且调试极不便利。不建议使用

4. 使用iframe的name和url的hash属性传递参数,来解决Iframe和主窗口之间的跨域通信(不推荐)
该方法性能很差,仅适用于IE6这些没办法使用postMessage的情况。

Gleasy会根据浏览器类型和版本自动决定使用1,2,3,4哪种技术。保证100%支持跨域。

六。技术之外
在线应用进程间通信技术带来的不单是一种在线平台方案,它还有其它方面的意义。这几年吵得最火的概念之一就是OPENAPI(开放平台),开放平台大多使用OAUTH(OR OAUTH2)进行,一个明显的特征是存在浏览器的跳转和用户的授权。除此之外,假如要A B C D四款应用要互相对接,就要进行4*3=12次研发才完成两两互相对接(因为每个应用每个接口的URL都不同),这就是所谓点到点的开放接口。另外还有一个严格的限制,如果A想同时使用B和C的服务,甚至有些依赖关系,那就变成几乎不可能了。

Gleasy平台上应用之间的通信就简单得多了,没有浏览器的跳转,无须用户反复授权,同时调用N个应用提供的服务,或者串行调用都极为方便,不存在任何限制。假如A B C D三款应用要互相对接,大家只需要跟Gleasy平台打交道就可以了,只须4次研发,另外大家只需要记住其它应用的名称和参数,完全不用理会对方的URL或者接口,即使对方的URL发生了根本变化也不会影响通信。没有浏览器的跳转,无须用户反复授权,由此便可大大节省沟通和研发成本,并且可以衍生出交互体验上更棒的产品,而不用受限于浏览器技术。

在Gleasy,使用拍照应用拍照,保存到一盘,使用美图秀秀打开一盘的图片编辑,保存后使用一信的邮件发出去。这就是在线应用进程间通信的魅力!@

此条目发表在 前端技术 分类目录。将固定链接加入收藏夹。

发表评论