CSDN:我比较想了解环信ONE SDK的整个技术架构。
隋云怡:实际上我们分了几个层次。有平台层、适配层、最终SDK的核心业务层。ONE SDK意在打造共同的分享的核心代码,这就是ONE SDK的概念。但每个平台还有不同的SDK,不同的平台有不同的API封装、适配平台的用法。这就出现了平台层,把很多和平台相关的业务放在平台去做。适配层是核心层,适配层就是和不同的平台绑定的实现的层,主要实现线程管理、定时器管理和平台相关的锁的管理,这种东西都是和平台息息相关的,脱离了平台就没有这些概念。所以我们必须做这样的层,使代码共享化。想达到这个情况,底层是真正具体的核心业务层,它实际上承载的是比较有竞争力的协议层,还有音视频层,这个层可以用来实时电话,可以看到视频。还有业务逻辑层,建立群会话、单聊会话,核心层会有不同的模块,模块化、插件化的目的是最后可以裁减,有的设备非常小,要求的代码量一定要小,内存要小,所以我们一定要有可定制裁减的功能,可以方便地给第三方App或者第三方厂家。还有重中之重的一层是协议层,协议层跟语言没有太大关系,和后台通讯的协议、机制,定义好哪个模块、字段是干什么的就可以了,好处是将来可以直接应用在IOT平台。
CSDN:从架构来讲,为了更好地为IOT提供设备、连接更好的服务,刚才你讲的需要具体落实,是否能举个例子讲解一下吗?
隋云怡:我们现在用的是树莓派的Raspberry Pi,它是嵌入式结构的物联网平台,代码也都跑过了,可以说架构已经验证过了。ONE SDK带来的纵向好处是你只要写完一套CODE,并符合这个规范基本都能过。不是这个圈子的人很难想象有一天冰箱、空调会直接连接起来。我们希望环信能做到那一步,你可以在冰箱上安一个视频就能跟客服对话。用了这个东西就非常便捷,也是一种创新。
CSDN:环信一直有一个IM开源社区,一部分是回馈开发者,另一部分是让开发者帮助环信变得更好。ONE SDK方面,在开源上面有什么举措?
隋云怡:我们正在计划中,目前我们还没有放在开源社区里来,原因是想给大家一个好的印象,我们将来给出的第一版非常不错、质量有保证的版本。不可能每个平台都做,没有这样的资源,只能借助Opensource Web感兴趣的人才帮助我们做这个事情。所以要借助开源平台。我们是有这个计划的,现在在上升期,等到稳定的时候回开源出去的,从技术角度来做到这点。
CSDN:目前国内包括环信在内,支持开源的声音很多,开源的风气正在变得浓厚,对此您有什么观点?
隋云怡:我们觉得开源是件好事,因为毕竟自己一个团队,做不了所有的事情,我们环信要效仿和学习Linux,吸收别人的反馈,想把生态圈打造得更大一些。
CSDN:现在的物联网在语言方面依然使用的是面向对象的比较低端的C语言,您怎么看?
隋云怡:语言因为C还是集合了效率、代码量可控的特点于一身,基本上平台SDK支持的都是C语言或C++,像WRTnode是支持JavaScript,而JavaScript中间还有个解析层,会浪费很大的内存,效率跟C语言比还是有一些差距。
CSDN:会在SDK包的大小方面给团队限制吗,比如必须控制在多少以内?
隋云怡:我们没有固定限制,不过还是尽量和当前的SDK做比较,不能超过它,否则会有很大问题。第一,代码写得有问题,第二,会影响很多开发人员,所以我们都是严格把关的。
CSDN:从技术角度来讲,整个团队在开发这样一款SDK的时候有遇到过什么样的难题,是怎么解决的?
隋云怡:是遇到过一些难题。就以database为例,我们做到抽象层,linux是支撑SQlite的,安卓底层是linux平台,Mac和iOS基本都有SQlite的支持,但安卓不允许引用SQlite那个动态库,它是实际存在的,怕有安全的问题或者其他的问题没考究过,它在上层做了一些封装。我们遇到一个问题,怎么平衡这个,我们想把SQlite代码拷到ONE SDK里,会增加SDK 600k的空间,要么调回去,调到Java层去写,但Java层会带来一个不好的情况,两套的database不好维护,最终想尽量用同一套 database,它可能增加600k,我们把其他部分补救一下,但是我们不想影响整个架构的设计。我们经过很多考究之后发现架构要回到一个 database。
CSDN:有一个关于跨平台的问题,SDK现在是支持iOS,移动Web?