环信ONE SDK架构介绍

摘要

环信即时通讯SDK自2014年6月正式公布2.0版本号至今已走过一个年头。从主要的单聊功能,到群聊功能,再到聊天室的实现。SDK无论是功能。稳定性,还是易集成性都在一步一步的走向完好与稳定,感谢开发人员们给与提供的反馈与帮助。使我们的SDK迅速的在诸多方面得到提高与改进。


随着如今物联网的兴起,环信如今的SDK的架构相应对未来物联网平台还是略有不足,使我们不得不在今年年初就考虑到怎样去改善我们的架构,使之可以较easy的适配到各个主流平台和物联网平台。


如今的Android, IOS, SDK都是各自维护了自己逻辑,给2.0开发带来了非常多不便。同样的功能须要维护两份代码,同一个bug要在不同的平台修复两次,因为不同平台的实现。导致Android。IOS架构设计不统一,API不一致。再加上在不同的平台开发的project师之间因为不同的实现导致沟通问题诸多,这样导致的问题就是,不同平台的开发进度大多数情况下都不同样。

所以针对以上的问题,我们今年年初就计划我们SDK3.0的开发。我们称之为ONE SDK,主要的理念就是我们实现共同IM 内核。使代码可被不同的平台最大化的重用,可是设计和实现却是面临着巨大的挑战,怎样适配到不同的平台。怎样最大化的重用代码都是要面临的问题。


ONE SDK 架构设计

整体设计



ONE SDK的设计整体分为3层,平台层-Platfrom layer,适配层-Porting layer。核心层-Common layer.

平台层会依据各平台的不同。实现不同的接口。开放符合平台层的API给第三方开发人员。

适配层主要要适配到ONE SDK 核心层所须要的一些接口,起到承上启下的作用。

核心层主要提供IM 功能和业务逻辑,保证最大化的代码重用。

考虑到跨平台共享代码,我们ONE SDK主要是用C++这样的跨平台的语言来实现。

平台层

我们计划要支持的平台为Android,IOS,MAC OS,Windows,Windows phone, Linux。Embedded Linux, 还有较为广泛应用的物联网平台-IOT OS。

我们会针对不同平台提供给开发人员,和平台一致API规范。使各平台的开发人员无难度的集成SDK。比如我们会提供JAVA给Android,Objective-C 给IOS和MAC, C++ 给Linux, IOT平台。

适配层


适配层主要就是各平台须要实现核心层所须要的一些接口类比如,上图给出的线程模型。定时器模型。数据库模型。还有HTTP模型。


这些模型都是和平台相关的,比如有的平台提供sqllite的訪问,有的没有,有的线程模型和定时器模型都有自己的实现方式比如物联网IOT OS,所以实现了上述的模型。就能够使核心层能够工作,只是也可能会遇到一些问题,这都会在详细的实现中会详细的应对。但结构是清晰的。


事实上比如Android,Linux, IOS, Mac OS。Windows都是支持C++11。也就是说都是支持C++11所提供的线程模型,所以这几个操作系统的线程模型的实现应该是相同的,所以代码是能够共享的, 可是数据库Anroid NDK是不支持sqlite訪问,所以这部分Android有两种策略一个是集成sqlite源码,二是回调给JAVA层,前一种策略是代码逻辑清晰,但坏处就是添加了代码量。


还有就是HTTP模型,默认的android,iOS。Mac OS,windows都有自己的API提供。所以ONE SDK策略就是假设有平台有原生的HTTP API 支持我们就会尽量用平台的,可是类似linux,就须要第三方库的支持比如libcurl.

所以综上所述适配层的意义重大,保证我们ONE SDK代码共享最大化的目的。

核心层

核心层是详细实现环信相关功能的模块。它里面也包括的几个部分。核心业务逻辑API实现。抽象协议层。和独立实时音视频模块。

Core Common

业务逻辑层,负责提供主要的IM功能。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


  • 会话管理
  • 消息收发
  • 登录鉴权
  • 连接管理
Audio/Video Call

实时音视频模块是一个独立的模块,能够单独存在,这样能够灵活处理,不须要时不用载入此模块。


watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

  • 实时音视频
  • 多人语音
Abstract Protocol Layer

协议抽象层,主要用来处理详细的IM底层协议。这层是比較独立的主要实现环信定义的IM传输协议,也为为日后协议改造,扩展提供承上启下的作用。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

  • 定义抽象消息载体
  • 主要的消息发送
  • 主要的消息回调
  • 定义主要的通知
上述ONE SDK架构是我们计划要实现的,如今一些主要的设计已经在Linux SDK上得到了实现。以下让我们继续了解下Linux SDK。

Linux SDK

经过几个月的开发,我们已经推出了Linux SDK測试版,有兴趣的开发人员能够小试一下去我们的官网 http://www.easemob.com/downloads 下载。

通过EMChatClient Facade类开发人员能够訪问到不论什么IM停供的功能

  • 登录注冊
  • 消息收发,支持TXT, IMAGE, VIDEO, AUDIO, FILE, LOCATION, 类型的message
  • 会话管理
  • 联系人管理
在开发linux SDK的时候我们利用了C++11提供的非常多优良feature,比如lambda。shared ptr。thread等较新的功能,通过这些功能的使用,让我们可以迅速而且高效的开发出Linux SDK測试版。


Lambda是我们的代码逻辑阅读起来更清楚,shared ptr使我们对内存的管理更为简单。thread的使用使我们能迅速的建立好线程模型,加快开发的速度。

我们在Linux SDK porting layer实现了线程模型,数据库模型。定时器模型和HTTP模型
  • 线程模型,利用C++11的thread进行封装
  • 数据库模型。使用Linux的sqlite
  • HTTP模型,我们使用了Libcurl进行了封装
  • 定时器模型,我们使用了C++11进行了封装
我们对Linux SDK还在紧锣密鼓,夜以继日的紧张开发中,群组和实时音视频功能还在开发中。可是在开发过程中我们也遇到了些的问题,比如不linux平台对库的支持也不尽同样,所以势必会对我们的架构有些改变,有些重构的工作也在进行中。我们希望8月底可以实现大部分的功能。


选择linux SDK为開始主要是由于大多数的嵌入式智能平台还是以linux为主,所以首先开发Linux 版SDK也是必先的一步,感谢我们的project师,我么的Linux SDK已经可以支持树莓派的开发环境,这对于非常多开发人员来说确实是个好消息。

假设想了解怎样集成Linux SDK请參考环信IM Linux SDK 集成说明

展望

Linux SDK 仅仅是实现我们ONE SDK 的第一步。我们下半年还要实现基于ONE SDK 的Android ,IOS,MAC OS, 还有主流物联网平台的SDK,通过借鉴Linux SDK的实现方式,我们觉得实现ONE SDK是能够做到的。

我们还会进一步和主要IOT平台供应商合作。实现某个详细IOT平台的环信SDK。使环信即时通讯平台生态圈更加壮大。

环信ONE SDK架构介绍的更多相关文章

  1. 李洪强iOS开发之-环信02_iOS SDK 介绍及导入

    李洪强iOS开发之-环信02_iOS SDK 介绍及导入 iOS SDK 介绍及导入 iOS SDK 介绍 环信 SDK 为用户开发 IM 相关的应用提供的一套完善的开发框架.包括以下几个部分: SD ...

  2. 李洪强iOS开发之-环信01_iOS SDK 前的准备工作

    李洪强iOS开发之-环信01_iOS SDK 前的准备工作 1.1_注册环信开发者账号并创建后台应用 详细步骤:  注册并创建应用 注册环信开发者账号 第 1 步:在环信官网上点击“即时通讯云”,并点 ...

  3. shit 环信 IM SDK & IM SDK & web

    shit 环信 IM SDK & IM SDK & web 环信 IM SDK, 采坑大全 自己写 UI appkey 是否正确 password 是字符串,不是 数字 HTTPS 是 ...

  4. 集成IOS 环信SDK

    集成IOS SDK 在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念. 下载SDK 通过Cocoapods下载地址 不包含实时语音版本SDK(EaseMobC ...

  5. mui初级入门教程(五)— 聊聊即时通讯(IM),基于环信 web im SDK

    文章来源:小青年原创发布时间:2016-06-15关键词:mui,环信 web im,html5+,im,页面传值,缓存转载需标注本文原始地址: http://zhaomenghuan.github. ...

  6. 环信SDK与Apple Watch的结合(1)

    该系列是记录在apple watch上开发IM,用到了最近挺流行的环信IM SDK. 一.先来一段网上随处可查到的信息: 1.两种分辨率 1.65寸 312*390 1.5寸 272*340 2.开发 ...

  7. 李洪强iOS开发本人集成环信的经验总结_01环信SDK的导入

    李洪强iOS开发本人集成环信的经验总结_01环信SDK的导入 01 - 直接在项目中导入SDK和一些静态库 这个时候,没有错误的编译没有错误的话,就说明SDK已经配置成功 还有一种方法是用cocoap ...

  8. 环信SDK 头像、昵称、表情自定义和群聊设置的实现 一(附源码)

    前言: 环信的SDK在公司的项目中有用到,现在用到的是群聊的部分,这里我们分析总结一下自己对环信给的DEMO大概的拆解一下,说说我们怎么样充分的利用这个demo来写我们所需要的业务.这个也由于篇幅的原 ...

  9. android-使用环信SDK开发即时通信功能及源代码下载

    近期项目中集成即时聊天功能.挑来拣去,终于选择环信SDK来进行开发,选择环信的主要原因是接口方便.简洁.说明文档清楚易懂.文档有android.ios.和后台server端.还是非常全的. 环信官网: ...

随机推荐

  1. linux 相关知识

    在mac 终端中可以直接访问ssh 命令:ssh root@127.0.0.*  批量删除文件: 当前目录下所有 *.html文件,除了index.html             [root@whr ...

  2. BZOJ 1010: [HNOI2008]玩具装箱toy(DP+斜率优化)

    [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊 ...

  3. 【bzoj4439】[Swerc2015]Landscaping 网络流最小割

    题目描述 FJ有一块N*M的矩形田地,有两种地形高地(用‘#’表示)和低地(用‘.’表示) FJ需要对每一行田地从左到右完整开收割机走到头,再对每一列从上到下完整走到头,如下图所示 对于一个4*4的田 ...

  4. 基于Linux的嵌入式文件系统构建与设计

    摘 要:Linux是当今一种十分流行的嵌入式操作系统.由于其具有执行效率高.占用空间小.实时性能优良和可扩展性强等特点,因此被广泛应用于工业控制领域.该文对其文件系统进行了简单的介绍,结合嵌入式系统应 ...

  5. 【09】Vue 之 Vuex 数据通信

    9.1. 引言 Vue组件化做的确实非常彻底,它独有的vue单文件组件也是做的非常有特色.组件化的同时带来的是:组件之间的数据共享和通信的难题. 尤其Vue组件设计的就是,父组件通过子组件的prop进 ...

  6. iOS添加测试设备与调试

    转至:http://www.lidaze.com/   在上一篇博客中,已经购买好了开发账号,既然都交了钱了,就做点有意义的事吧!要想使用真机测试,需要准备如下: 1.证书:安装到电脑上的cer文件, ...

  7. Mybatis Plugin插件安装破解及使用

    2018年2月更新 2018年2月份,提供一个网上比较多的一个版本V3.21版本,下载资源里面有个已整合版直接解压放入C:\Users\你的用户名\.IntelliJIdea2017.3\config ...

  8. Zookeeper如何从官网下载和安装

    打开百度搜索,输入Zookeeper关键词,一般第一条搜索记录就是apache官网下载的地址 进入apache官网,由于是国外的网站,里面内容都是英文的,可以大概看下Zookeeper的描述和介绍,在 ...

  9. 老郭带你学数据结构(C语言系列)1-线性表之静态顺序表

    在学习之前,先说下我的软件情况,操作系统是manjaro linux 今天刚刚升级的,编辑器是vim8.0.55,编译器是gcc 6.2.1,调试器是gdb 7.12,版本再低点也可以,只要gcc版本 ...

  10. paramiko模块及ssh远程登陆

    ssh实现远程登陆一般有两种方式,一种就是用户密码登陆,另一种是密钥登陆(当然默认是要服务端打开ssh服务). 我这里使用这两种方法操作一下远程登陆,测试客户端是本机的root与jeff用户,远程连接 ...