环信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. Mysql实战之主从复制的读写分离

    author:JevonWei 版权声明:原创作品 ProxySQL构建主从复制的读写分离 ProxySQL官网及下载地址 http://www.proxysql.com/ 架构角色 mysql-sl ...

  2. 【bzoj1189】[HNOI2007]紧急疏散evacuate BFS最短路+动态加边网络流

    题目描述 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一块空地:如果是'X',那么表示这是一面墙,如果是'D',那么表示这是一扇门,人们可以 ...

  3. AtCoder Regular Contest 092 B Two Sequences

    题目大意 给定两个长为 $n$ 个整数序列 $a_1, \dots, a_n$ 和 $b_1, \dots, b_n$ .求所有 $a_i + b_j$($1\le i, j\le n$)的 XOR ...

  4. HDU 4845 拯救大兵瑞恩(分层图状压BFS)

    拯救大兵瑞恩 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Sub ...

  5. POJ 1753 Flip Game(高斯消元+状压枚举)

    Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 45691   Accepted: 19590 Descr ...

  6. ZOJ 3940 Modulo Query(YY+二分)

    Modulo Query Time Limit: 2 Seconds      Memory Limit: 65536 KB One day, Peter came across a function ...

  7. ionic2实战-使用Chart.js

    前言 Chart.js官网 Chart.js中文文档 安装Chart.js 执行cnpm install typings -g,全局安装Typings 执行typings search chart.j ...

  8. Python 错误类型及解决方法

    SyntaxError: invalid syntax          表示“语法错误:不正确的语法” 检查代码的缩进,代码格式是否正确,Python的缩进一般为四个空格,tab键尽量不要用. In ...

  9. jquery取得iframe中元素的方法

    原文发布时间为:2010-12-27 -- 来源于本人的百度文章 [由搬家工具导入] 收集利用Jquery取得iframe中元素的几种方法 :contents()  $.trim($("if ...

  10. C语言中的基础知识变量探讨

    C语言中的变量是编程的基础,主要有四个要素:存储类型.存储大小.存储名称和存储地址. 一.变量的要素: 1.存储类型:主要表明名变量存储的特征,主要有auto.extern.static和regist ...