第三方im系统调研

date: 2016-03-17 13:11:19
tags: im

一. 参考文献

IM系统架构设计之浅见

二. 第三方IM平台调研

网易云信

  1. 网易云信服务架构

    云信以提供客户端SDK(覆盖Android、iOS、Web、PC)和服务端OPEN API的形式提供即时通讯云服务。
    开发者只需想好APP的创意及UI展现方案,根据APP业务需求选择云信的相应功能接入即可。

【接入云信你需要】
为APP的每一个用户帐号绑定一个云信帐号(ACCID),并为之设定安全秘钥(TOKEN)。
调用云信提供的API来实现各种即时通讯功能。

  1. 网易云信用户体系

    accid 云信用户id 最大长度32字节,必须保证应用内唯一,不区分大小写(云信统一小写处理),只允许字母、数字及以下半角符号 @ _ . -
    token 云信用户口令 与accid一起作为SDK连接云信服务器的凭证
    name 推送昵称 用于任务栏推送时显示的用户昵称

    网易云信的用户定义非常简单,不对应用的用户信息隐私有任何的窥探与侵入。同样,对于网易云信的accid和token体系,也不会对应用的用户帐号及密码隐私有任何风险。详情请参阅用户帐号的隐私保护

    App,指第三方app客户端;
    AppServer,指第三方app服务端;
    网易云信WebServer,指网易云信开放的Server级接口服务;
    网易云信IMServer,指网易云信SDK直连的IM服务;
    上图可以看到,网易云信的用户体系使用上有三步:

    注册网易云信用户id

    step1,第三方app服务端通过网易云信Server注册用户接口注册用户

    获取网易云信用户参数

    Step2,第三方app客户端第一次登录时,从第三方app服务端拿到对应的accid与token

    将用户参数传给SDK

    Step3, 第三方app客户端把accid与token传给sdk

  2. 有开源的android,ios, web的ui库

  3. 阅后即焚

    云信原生支持了文本,图片,语音,视频和地理位置等常用的消息类型;对于产品的特殊需求云信也提供自定义消息类型,产品可以使用自定义消息实现“阅后即焚”等特殊的消息类型。

  4. 消息历史记录保存多久 ,如何获取?

    SDK会保存一份本地消息历史记录,并提供了删除和查询的接口,由应用自己管理。云信服务端默认不存储应用消息历史记录,但提供保存服务端保存历史记录的服务。该服务占用服务端存储资源,是一项收费服务,最长可以保存3年。服务端保存的历史记录,同样提供查询接口供应用使用。

  5. 历史记录下载

    查询存储在云信服务器中的单人聊天历史消息,只能查询在保存时间范围内的消息
    跟据时间段查询点对点消息,每次最多返回100条;
    不提供分页支持,第三方需要跟据时间段来查询。

  6. 历史消息查询返回的消息格式说明
    普通文本消息
    {
    “from”:”test1”,
    “msgid”:792478,
    “sendtime”:1430967883307,
    “type”:0,//文本消息类型
    “body”:{
    “msg”:”哈哈哈”//消息内容
    }
    }

    图片消息
    {
    “from”:”test1”,
    “msgid”:792502,
    “sendtime”:1430978396680, //发送时间ms
    “type”:1 //图片类型消息
    “body”:{
    “name”:”图片发送于2015-05-07 13:59”, //图片name
    “md5”:”9894907e4ad9de4678091277509361f7”, //md5
    “url”:”http://nimtest.nos.netease.com/cbc500e8-e19c-4b0f-834b-c32d4dc1075e“, //生成的url
    “ext”:”jpg”, //图片后缀
    “w”:6814, //宽
    “h”:2332, //高
    “size”:388245 //图片大小
    }
    }

    语音消息
    {
    “from”:”test1”,
    “msgid”:792479,
    “sendtime”:1430967899646, //发送时间ms
    “type”:2 //语音类型消息
    “body”:{
    “dur”:4551, //语音持续时长ms
    “md5”:”87b94a090dec5c58f242b7132a530a01”, //md5
    “url”:”http://nimtest.nos.netease.com/a2583322-413d-4653-9a70-9cabdfc7f5f9“, //生成的url
    “ext”:”aac”, //语音消息格式,只能是aac格式
    “size”:16420 //语音文件大小
    }
    }

    视频消息
    {
    “from”:”test1”,
    “msgid”:792505,
    “sendtime”:1430978424249, //发送时间ms
    “type”:3 //视频类型消息
    “body”:{
    “dur”:8003, //视频持续时长ms
    “md5”:”da2cef3e5663ee9c3547ef5d127f7e3e”, //md5
    “url”:”http://nimtest.nos.netease.com/21f34447-e9ac-4871-91ad-d9f03af20412“, //生成的url
    “w”:360, //宽
    “h”:480, //高
    “ext”:”mp4”, //视频格式
    “size”:16420 //视频文件大小
    }
    }

    地理位置消息
    {
    “from”:”test1”,
    “msgid”:792501,
    “sendtime”:1430978381896, //发送时间ms
    “type”:4 //地理位置类型消息
    “body”:{
    “title”:”中国 浙江省 杭州市 网商路 599号”, //地理位置title
    “lng”:120.1908686708565, // 经度
    “lat”:30.18704515647036 // 纬度
    }
    }

    文件消息
    {
    “msgid”:7925061,
    “sendtime”:1430978435894, //发送时间ms
    “type”:6 //文件消息
    “body”:{
    “name”:”BlizzardReg.ttf”, //文件名
    “md5”:”79d62a35fa3d34c367b20c66afc2a500”, //文件MD5
    “url”:”http://nimtest.nos.netease.com/08c9859d-183f-4daa-9904-d6cacb51c95b“, //文件URL
    “ext”:”ttf”, //文件后缀类型
    “size”:91680 //大小
    }
    }

    第三方自定义消息
    {
    “msgid”:792506,
    “sendtime”:1430978435894, //发送时间ms
    “type”:100, //第三方自定义消息
    “body”:{ //自定义的内容,需要符合json格式
    }
    }

  7. 支持单聊、群聊、聊天室3种聊天方式

  8. 消基本聊天功能: 支持单聊、群聊、聊天室3种聊天方式, 消息被对方查看后,可获得消息的已读状态, 即消息类型支持自定义,可实现红包、石头剪刀布、阅后即焚等丰富功能, 单聊时可获取对方当前正在输入的状态, 新消息提醒功能,支持设置铃声/振动提醒、免打扰时段等,支持对用户设置或关闭消息提醒, 可以将用户加入黑名单,拉黑后将不再收到对方发来的任何消息或请求

  9. 群组和聊天室基本功能:提供普通群(Normal)以及高级群(Advanced)两种形式的群聊功能,高级群拥有更多的权限操作, 创建群、邀请入群、申请入群、踢人、修改群资料、设置管理员、更改群昵称、移交群主、解散群等, 200人/群,标准版可以升级扩展, 试用版50群/人,标准版100群/人,标准版可以升级扩展, 提供无人数上限的聊天室功能,支持聊天室创建、解散、资料编辑、历史消息(默认10条)等功能, 踢人、禁言、拉黑、设置管理员

  10. 消息记录基本功能: 云端存储用户最近的历史消息,提供关键词搜索聊天记录的功能。消息存储时长可根据业务需求扩展, 用户切换到任何设备都可以读取到历史消息, 用户离线后重新上线,可收到离线期间到达的消息, 提供与用户最近有过会话的联系人信息,快捷实现会话列表或者最近联系人列表。

  11. 消息托管基本功能: 将消息数据实时同步给第三方开发者的服务器。支持单聊数据、群聊数据、讨论组数据、个人自定义系统通知、群组自定义系统通知数据的抄送, 提供用户好友关系托管,使用云信用户关系、用户资料托管,构建用户通讯录, 提供用户资料托管功能,第三方APP可以选择由云信托管用户资料,也可以自行实现。

  12. 技术优势: 15年专注IM研发,IM解决方案经过亿级产品,线上验证,移动端解决方案持续优化5年以上。成熟专业运维、云服务团队,全套自研方案,行业顶尖前端技术提供UI组件。采用分布式数据库,应用级数据隔离,数据文件系统多重备份,亿级产品适用, 15年经验,已成功发送超1000亿条消息, 私有精简二进制协议,速度更快,性能更好, 异地多机房服务集群,覆盖全球范围, 架构灵活,支持水平自动伸缩 , 采用动态智能DNS掉线快速重连机制,消息排重,持续重连直至到达

  13. 收费:

  14. 客户:
    网易云课堂, 顺丰速运, 天谕, 网易新闻, 网易云音乐。。。

环信

  1. 环信这样设计的目的有2个:
    尽量少的侵入开发者自己APP的业务数据和用户体系。用户体系是一个APP的最最核心的数据,在当前中国的环境下,部分开发者会比较难信赖一个第三方厂商,把自己最关键的用户体系信息托管到一个第三方平台上。
    大多数APP都有自己的服务器后台,有自己的用户体系。所以环信要尽力做好的环节是尽可能方便开发者把环信和自己的用户体系集成,而不是为开发者提供他们可能并不会用的用户体系。

  2. 可以发送阅后即焚之类的消息吗?
    阅后即焚,是指对方查看你发的消息后,双方同时删除。
    这个功能可以用环信的“已读”回调实现,当对方查看消息后,发送已读通知,双方同时删除就可以了。

  3. 后端调用rest接口 http://docs.easemob.com/doku.p … og%23 导出聊天记录,保存到你服务器,然后你自己去服务器获取。
    接口限流说明: 同一个IP每秒最多可调用1次, 超过的部分会返回503错误,所以在调用程序中, 如果碰到了这样的错误, 需要稍微暂停一下并且重试。如果该限流控制不满足需求,请联系商务经理开放更高的权限。(一次最多返回1000条)

    使用示例1:根据timestamp查询聊天记录 在URL后面加上参数
    ql=select where timestamp>1403164734226
    或者
    ql=select
    where timestamp<1403164734226
    使用示例2:分页获取数据
    使用limit参数获取数据完毕后,如果后边还有数据,会返回一个不为空的cursor回来,使用这个cursor就能进行分页获取了。
    分页示例:根据之前获取数据返回的cursor继续获取后面的20条数据。在url后面加上参数 (limit最大值为1000)
    limit=20
    cursor=MTYxOTcyOTYyNDpnR2tBQVFNQWdHa0FCZ0ZHczBKN0F3Q0FkUUFRYUdpdkt2ZU1FZU9vNU4zVllyT2pqUUNBZFFBUWFHaXZJUGVNRWVPMjdMRWo5b0w4dEFB

    管理后台支持的统计数据:新增注册用户数, 每日活跃用户数, 每日新增活跃用户数, 每日发送消息用户数, 单聊, 群聊

  4. 提供整套移动客服解决方案

  5. 基本im功能:发语音,图片,位置,附件等,Z可扩展自定义消息类型, 支持500人到2000人大群完善的群组权限管理, 基于IP网络的点对点实时语音和实时视频

  6. 技术: 后端服务基于Erlang,动态扩容,热部署,高并发, cassandra跨数据中心数据复制,高性能的读写请求和水平扩展, kafka为核心的统一数据分发,高吞吐量, 通过了CSTC千万级压力测试。通讯协议为移动网络深度优化,省电,省流量,弱网络环境下依然保证消息必达,在Android平台上保持长连接,实现消息推送;在iOS平台完美对接APNS,完美兼容各个版本的Android和iOS,支持高中低端各种硬件。无需修改或同步现有APP用户体系即可完成集成,开源UI Demo, 省去复杂的底层通讯模块开发。

  7. 数据安全: 不侵入APP的用户体系,保护客户隐私, 自定义的传输加密,TLS+HTTPS, 严格的数据隔离和访问控制, API权限管理。

  8. 楚楚街, 猎聘, 汽车之家, 百合相亲。。。

  9. 价格: 日活30万以下永久免费 ,日活30万以上,每10万日活用户5000元每月

融云

  1. 架构介绍
    融云提供的即时消息传输服务,不在 App 之外建立并行的用户体系,不需要同步用户账户,不影响 App 现有的系统架构与帐号体系,与现有业务体系能够实现完美融合。

    融云的架构设计上具有如下特点:

    无需改变现有 App 的架构,直接嵌入现有代码框架中;
    无需改变现有 App Server 的架构,独立部署一份用于用户授权的 Service 即可;
    专注于提供通讯能力,使用私有的二进制通信协议,消息轻量、有序、不丢消息;
    安全的身份认证和授权方式,无需担心 SDK 能力滥用(盗用身份的垃圾消息、垃圾群发)问题。

    如图:

    蓝色为您的应用(App)和应用服务器(App Server),用户数据(User Data)和用户好友消息(Friend Relationship Data)保存在您的应用服务器上,融云不需要同步 App 的用户系统和好友关系;绿色为融云服务器(RongCloud Server)和融云 SDK,支持快速集成和平滑迁移。

    蓝色箭头表示您自己的业务数据经由您自己的应用服务器;绿色箭头表示消息需要经过融云服务器转发(IM 的离线、通知等逻辑决定了消息必须经由服务器进行一次转发);橙色箭头表示您的应用服务器只需要和融云服务器进行身份授权,不需要您提交详细用户资料。

  2. 暂时不支持阅后即焚功能

  3. 获取 APP 内指定某天某小时内的所有会话消息记录的下载地址(目前支持二人会话、讨论组、群组、聊天室、客服、系统通知消息历史记录下载)URL:https://api.cn.ronghub.com/message/history.[format]

  4. 管理后台支持的统计数据:活跃人数, 新增人数, 发消息人数, 新增讨论组人数, 还有部分付费功能。

  5. im基础功能:文字、语音片段、图片、位置等内容载体, 创建多人讨论组, 大型社交群, 支持自定义消息

  6. 费用: 分为免费功能和付费功能,在10万日活下,每增加一个功能,为2000/月