即时通讯

即时通讯服务的客户端与云端之间经由一条长链接实时收发消息,聊天记录保存在云端,可以随时翻查。单聊、群聊、不限人数的聊天室和公众号式的系统对话都归结为「对话」这一个概念。

即时通讯与 LeanCloud 的其他服务紧密配合:对话存在数据存储里,可以像普通数据一样查询;服务端 Hook 用云引擎编写,能介入消息投递的各个环节;收件人不在线时,消息交给消息推送送达。

功能

对话

单聊、群聊、不限人数的聊天室、公众号式的系统对话和客服用的临时对话都是一种「对话」,接口一致。对话可以添加自定义属性并按条件查询。

消息

文本、图片、语音、视频、位置和二进制消息都可以发送,也可以自己扩展消息类型。消息发出之后还能撤回和修改,可以提及某人,发送方能收到送达和已读回执。

聊天记录与多端登录

消息保存在云端,可以从任意时刻往前翻页查询。同一个用户可以在多个设备上同时登录,消息同步到每一处,也可以限制成只在一处登录。

离线推送

收件人不在线时,消息转为推送通知送达,推送的内容和对象都可以自己指定。

权限与内容管理

登录、加入对话和查询聊天记录都可以交给开发者自己的服务端签名授权。聊天室可以设管理员、踢人和禁言,聊天内容可以按应用自己的词表实时过滤。

Hook 与 REST API

对话的创建与成员变动、消息投递的前后、客户端的上下线都可以触发云函数。服务端也可以用 REST API 发消息、查记录和管理对话。

优势和特色

功能全面,接口灵活

提供对话黑名单、敏感词等管理功能,支持公众号、客服号等特定对话形态,更有可编程消息 Hook 机制可灵活满足各类业务需求。

稳定可靠

已稳定服务数万开发团队,支撑日活千万的产品,99.9% 的可用性承诺。支持消息下发峰值超过 1.2 亿条 / 分钟,完美应对高并发和爆发式活动推广。

精准对接

客户端 SDK 与 demo 代码完全开源;研发工程师直接回复工单和社区提问,7x24 小时紧急状态电话支持。

SDK 支持

客户端 SDK 覆盖这些语言和平台,服务端另有 REST API。

JavaScript

浏览器 · Node.js · 小程序

Objective-C

iOS · macOS · tvOS · watchOS

Swift

iOS · macOS · tvOS · watchOS

Java

Android · 服务端

C#

.NET · Unity

Flutter

iOS · Android

技术介绍

客户端与云端之间是一条 WebSocket 长连接,设备并不固定连往某一台服务器:登录时先向 Router 询问,由它按各台长连接服务器的实时负载分配一台。普通消息保证至少送达一次,重复的部分由 SDK 去重。

服务端分为多个组件,各自独立部署:长连接服务器维持设备的连接,Router 负责分配,推送服务处理订阅关系并触发推送,WatchDog 从各台服务器收集运行和统计数据,遇到异常发起报警。对话是数据存储 _Conversation 表里的一条记录,消息记录则存在 HBase 上。

长连接服务器支持线性扩展。服务发现基于 Slacker Cluster 和 ZooKeeper:每个实例把自己提供的服务注册成 ZooKeeper 上的临时节点;调用方监听自己依赖的节点,可以在部署后自动发现新的节点。Router 也通过这套机制轮询在线的长连接服务器,掌握它们的负载。

价格方案

以中国节点的价格为例。开发版有免费额度,商用版按用量计费,另有企业版需商务洽谈。

开发版商用版
登录用户数免费 500 人 / 天15 元 / 万人 / 天
REST API 请求免费 3 万次 / 天,与数据存储、消息推送等服务共享额度1.0 元 / 万次
聊天记录保存时间免费 6 个月6 个月,可延长至最长 3 年,1500 元 / 月
成员角色与权限管理不支持70 元 / 天
黑名单不支持70 元 / 天

更新历史

  1. 统计中增加网络流量

    即时通讯的用量统计中增加网络流量一项,聊天室和大型群组里消息下发的开销可以看到具体数字。

    即时通讯服务统计结果中增加网络流量展示

  2. Flutter 支持即时通讯

    Flutter 应用可以使用即时通讯。SDK 以插件形式开发,底层调用 Swift SDK 和 Java Unified SDK,以便使用系统层面的能力。

    即时通讯服务 Flutter Plugin SDK 发布

  3. REST API 支持提醒成员

    服务端用 REST API 发消息时可以提及某个成员或全体成员,提醒不必再从客户端发出。

    LeanCloud 2019 回顾

  4. 新建对话默认唯一

    SDK 新建对话时默认带上 unique 参数,成员相同的对话不会重复创建,重复的请求拿到的是同一个对话。

    LeanCloud 2019 回顾

  5. 离线推送并入推送记录

    即时通讯转发的离线推送进入消息推送的历史记录,可以和普通推送一起查看。

    2019 年 11 月更新

  6. 支持客户端上下线 Hook

    客户端登录成功、登出成功和意外下线时调用云函数,服务端由此掌握用户的在线状态。

    2019 年 9 月更新

  7. Swift SDK 支持即时通讯

    Swift SDK 加入即时通讯,iOS 应用用 Swift 就可以收发消息,不必再经由 Objective-C SDK。

    Swift SDK 即时通讯功能(beta 版)发布

  8. 群聊支持已读回执

    回执此前只用于单聊,现在群聊中也能知道消息被谁读过。

    LeanCloud 月板报 第二期

  9. 微信小程序支持实时通信

    微信小程序 SDK 集成实时通信模块,小程序里可以做客服工具、聊天群组和实时对战游戏。

    2016 年 10 月更新

  10. LiveKit 发布

    把直播、文字聊天、弹幕和送礼的界面做成一套开源 UI 套件,视频流由七牛提供,聊天由实时通信提供,开发者可以在它的基础上二次开发。

    福利来了!快用 LiveKit 打造自己的直播传奇

  11. 推出 JavaScript WebRTC 插件

    建在聊天服务之上的插件,能在 Web 端做一对一的双向音视频通话。

    2016 年 9 月更新

  12. 聊天室支持踢人与禁言

    聊天室增加把成员踢出、强制下线和禁言的接口,供运营管理使用。

    2016 年 7 月更新

  13. ChatKit 发布

    在实时通信 SDK 之上封装了一套聊天界面,会话列表、消息气泡、图片和语音这些常见部分都已备好,授权协议允许二次开发。

    2016 年 5 月更新·2016 年 6 月更新

  14. 系统对话支持广播

    系统对话增加广播接口,一条消息发给应用的全部订阅者,不必逐个投递。

    2016 年 4 月更新

  15. 聊天协议改用 protobuf

    客户端与云端之间的传输协议由 JSON 改为 protobuf,可以省去七成流量。

    2016 年 1 月更新

  16. 支持单点登录

    同一个用户在新设备上登录后,先前的设备被挤下线。

    2015 年 10 月更新

  17. 推出系统消息

    系统消息上线,可以向用户进行大规模广播。

    2015 年 5 至 8 月更新

  18. 支持敏感词实时过滤

    聊天内容按词库实时过滤,命中的词会被替换掉,可以按应用开启。

    2015 年 4 月更新·2015 年 5 至 8 月更新

  19. 推出对话相关的云代码 Hook

    继消息 Hook 之后,对话的创建和成员变动也可以触发云函数。

    2015 年 4 月更新

  20. 实时通信 2.0 发布

    单聊、群聊和开放聊天室统一为「对话」,每个对话对应数据存储 _Conversation 表里的一条记录,可以添加自定义属性并按条件查询。支持任意查询对话历史记录,同时提供富媒体消息类型,也可以自定义消息类型。

    实时通信 2.0:对话 API 和多媒体消息

  21. 推出消息 Hook

    两个云函数挂在消息投递的流程上:_messageReceived 在消息存入离线队列之前触发,可以改写内容、改收件人列表,或者直接丢弃;_receiversOffline 在离线通知发出之前触发,可以决定推送的内容和对象,或者跳过推送改用短信、邮件。

    实时通信云代码集成发布

  22. 支持消息回执与在线状态查询

    单聊中可以通过回执知道消息是否送达,也可以查询某个用户当前是否在线。

    2014 年 11 月更新

  23. JavaScript 支持实时通信

    浏览器和 Node.js 里也可以收发消息,实时通信不再只有移动端。

    2014 年 10 月上旬更新

  24. 推出聊天记录 REST API

    服务端可以取回一个对话的历史消息,此前消息只在推送到客户端时才看得到。

    2014 年 8 月上旬更新

  25. 推出聊天室

    一条消息发给房间里的所有人,不必逐个指定收件人。

    2014 年 7 月最后两周更新

  26. 实时通信服务发布

    在推送的长连接上增加了上行通道,客户端与服务端之间由此可以双向收发数据。第一版只提供底层接口:点对点收发数据、上下线通知和权限认证,聊天记录和会话管理由应用自己安排。鉴权通过签名完成,因此接入的应用不必使用数据存储。

    AVOS Cloud 实时通信服务发布:拉近用户间的距离

数据来源

功能介绍与价格参考了 LeanCloud 官网的 即时通讯产品页开发文档;「优势和特色」段落原文摘录自官网。技术介绍参考了 实时通信服务架构:微服务和服务发现 一文。

更新历史整理自 LeanCloud Blog 的产品更新汇总、月度通讯和单独发布的公告。