全新设计的 JavaScript 实时通信 SDK 3.0 现已发布!

今天我们高兴地宣布 LeanCloud 下一代 JavaScript 实时通讯 SDK 的 3.0 beta 版本发布了!我们不仅为这一新版本(以下简称 v3)带来了性能提升,还加入了很多令人激动的新功能和改进,包括单点登录、未读消息通知、按条件查询对话、自动更新的对话和消息状态、自定义消息类型、更好的断线重连机制,以及重新设计的 API 等等。

重新设计的 API

在 v3 中我们改进的重点是 SDK 的易用性,为此我们设计了全新的 API。除了一些细小的命名与特性的区别,JavaScript SDK v3 的 API 与其他平台 SDK 的 API 已经统一。随着平台差异性的减少,开发者在为各平台应用设计与实现阶段所投入的工作量也会降低。

相较于 v2,v3 API 对易用性的改进体现在以下几个方面:

  • 自动更新的对话和消息状态
  • Promise 与异常处理
  • 新的事件模型
  • 可扩展的消息类型系统

自动更新的状态

v2 中封装了各种操作指令与事件,但是在真实的项目中,你仍然需要额外维护一些状态,这些状态包括了:

  • 对话:成员列表、未读消息数、最后消息时间、最后消息(如果有)
  • 消息:发送状态

v3 中这些状态都会由 SDK 自动更新。这将大大简化业务逻辑的代码,比如当你使用类 MV* 框架时,你可以直接将这些实例与 View 层绑定,就像下面这个使用 Angular 展示消息列表的例子一样:

<ul class="list-group">
  <li class="list-group-item" ng-repeat="conversation in conversations">
    <span class="badge">{{conversation.unreadMessagesCount}}</span>
    <h4 class="list-group-item-heading">{{conversation.name}}</h4>
    <p class="list-group-item-text">{{conversation.lastMessageAt | date:'medium'}}</p>
  </li>
</ul>

Live demo: http://jsplay.avosapps.com/fuk/embed?html,js,output

Promise 与异常处理

所有的异步 API 将返回 Promise 实例。相比于 v2 中回调的方式,Promise 将会避免回调嵌套过深的问题,同时解决了 v2 异步操作异常被 SDK 隐藏的问题。

// 使用 Promise 以链式方法登录、创建会话、发送消息
realtime
  .createIMClient('three-bodies')
  .then(tom => tom.createConversation({ member: ['the-earth'] }))
  .then(conversation => conversation.send(new TextMessage('不要回答!'))
  .then(message => { /* 成功 */ })
  .catch(error => { /* 处理异常 */ });

新的事件模型

v3 中的事件 API 使用的依然是 Node.js 中 EventEmitter 的设计。与 v2 中所有事件都在 RealtimeObject 上派发不同,v3 中不同类型的事件会在不同的层面派发:

  • 网络状态相关的事件在 Realtime 实例上派发。
  • 某个客户端相关的事件在该 IMClient 实例上派发。
  • 某个对话相关的事件在该 Conversation 实例上派发,同时也会在其隶属的 IMClient 实例上派发。

详细的事件列表与描述,请参阅 API 文档 的 Events 部分。

可扩展的消息类型系统

自定义一个消息类型从来没有像现在这么简单:

@AV.messageType(3)
@AV.messageField('foo')
class CustomMessage extends AV.TypedMessage {
  constructor(foo) {
    super();
    this.foo = foo;
  }
}

Live demo: http://jsplay.avosapps.com/xor/embed?js,console

当然,这个例子中用到了继承与装饰器,你还需要 TypeScript 或者 Babel 才能运行。这里还有个 ES5 的例子

同时,基于 LeanCloud 存储服务,SDK 还提供了常见的富媒体消息类型(文件、图片、视频、音频、位置)。为了避免实时通讯 SDK 与存储 SDK 的耦合,这些富媒体消息类型是一个独立发布的插件,关于富媒体消息的详细内容请参阅《JavaScript 实时通信开发指南 – 富媒体消息》。

新增功能

JavaScript 的 API 与其他平台 SDK 的 API 的统一意味着以下功能已得到支持:

断线重连机制

SDK 的连接层也被重新设计,断线重连机制变得更加可靠,存在于 v2 中的 crash 与漏报已被消除。

除了 disconnectreconnect,v3 中增加了两个新事件 scheduleretry,通过它们你就可以了解到 SDK 在断线重连的过程中正在做什么,进而向用户给出更友好的提示。关于断线重连机制的细节请参阅《JavaScript 实时通信开发指南 – 网络状态响应》。

性能提升

v3 还包含了一些底层上的改进:

  • 二进制协议 ProtoBuf 的引入使传输消息时的流量消耗减少了 70%。
  • 多个 Client 实例共享一个长连接的措施减少了 SDK 消耗的资源。

从 v2 升级

v3 API 不兼容 v2。对于正在使用 v2 的用户,尽管 v2 中所有的 API 在 v3 中有对应的实现(参见《JavaScript 实时通信 SDK v3 迁移指南》),我们仍然需要提醒,迁移到 v3 意味着一定的迁移成本。

此外,必须指出的是,v3 去掉了对 IE9 及以前版本的支持,如果需要兼容这部分运行环境,请继续使用 v2。在 v3 正式发布后,v2 依然会得到至少 6 个月的安全更新。


详细的 SDK 使用指南,请参阅《JavaScript 实时通讯开发指南》。在使用过程中有任何问题与建议,欢迎通过我们的 论坛工单 进行反馈。

发表评论

电子邮件地址不会被公开。 必填项已用*标注