发版说明
本文提供 RTM v2 SDK 的发版说明。
自 2.2.0 起,RTM SDK 和 RTC SDK(4.3.0 及以上版本)都包含 aosl.xframework
库。如果你同时使用了 RTM 和 RTC SDK,为避免冲突,需进行如下操作:
- 如果你通过 CDN 手动集成 SDK,请手动删除更低版本的
aosl.xframework
库; - 如果你使用依赖管理工具(如 Maven 或 CocoaPods) 集成 SDK,请确保在项目中引入更高版本的
aosl.xframework
库。
具体的集成指南可以参考如何处理同时集成 RTM SDK 和 RTC SDK 遇到的问题?
- 2.2.2 RTM SDK
aosl.xframework
库版本为 1.0.11。 - 2.2.1 RTM SDK
aosl.xframework
库版本为 1.0.11。 - 2.2.0 RTM SDK
aosl.xframework
库版本为 1.0.0.17。
2.2.2 版
该版本于 2024 年 11 月 6 日发布。
该版本修定了 Presence 事件中 SNAPSHOT
事件的触发时机。现在,只要用户在频道内,就可能会再次收到 SNAPSHOT
事件;收到后,用户可以更新自己的全量信息,来避免因异常导致的状态不同步问题。
该版本修改了锁(Lock)过期时间的计算规则。该版本起,锁的过期时间将从服务端判定用户离线开始计算。
该版本在 AgoraRtmPublishOptions
中新增了 storeInHistory
属性,支持在频道中发送消息的同时,将消息存储到云端,后续用户可以通过历史消息接口获取。
该功能目前处于 Public Beta 阶段。如需使用,需要前往控制台开启。
该版本在 SDK 连接状态 LinkStateEvent
中添加 AgoraRtmLinkStateChangeReason
枚举类,报告连接状态变更的原因。
该版本提升了基础消息服务在服务异常时的业务表现,避免因部分服务出现异常,导致的消息服务不可用的问题。
该版本修复了如下问题:
- 某些场景下,Token 类型不正确导致异常错误。
- 某些场景下,用户可能多次收到相同离线用户的离线通知。
- 相同 UID 在不同端登录后,可能出现连接状态异常。
- 频繁设置 Presence 状态时,可能导致数据异常。
- 未开通指定服务时,加入频道时未返回错误。
- 某些场景下,异常属性值可能导致崩溃问题。
2.2.1 版
该版本于 2024 年 7 月 17 日发布。
该版本进行了如下改进:
- 优化了底层算法能力,提升了数据同步速度。
- 在
AgoraRtmLinkStateEvent
中,将 Token 过期时返回的reason
字段由TicketExpired
改为TokenExpired
。
该版本修复了本地用户未调用 leave
方法直接调用 logout
方法时,偶现远端用户收不到 AgoraRtmPresenceEventTypeRemoteLeaveChannel
事件通知的问题。
2.2.0 版
该版本于 2024 年 4 月 23 日发布。
该版本的 API 变更如下:
-
删除了
createMetadata
方法。参考如下示例代码修改你的实现代码:Objective-C// v2.2.0 之前
AgoraRtmMetadata* metadata = [[rtm getStorage] createMetadata];Objective-C// v2.2.0
AgoraRtmMetadata* metadata = [[AgoraRtmMetadata alloc] init]; -
取消了
AgoraRtmStateItem
类,并将如下参数由NSArray<AgoraRtmStateItem *>
类型变为NSDictionary
类型,参考对应 API 文档修改你的实现代码。setState
中的items
参数。PresenceEvent
中的states
参数。UserState
中的states
参数。
该版本新增支持 macOS 和 VisionOS 平台,支持的最小版本和目标架构见平台支持。同时,该版本也将包名由 AgoraRtm_iOS
变更为 AgoraRtm
。升级至该版本后,在使用 Cocoapods 集成方式时,你需要将 Podfile
文件修改为以下内容:
platform :ios, '11.0'
target 'Your App' do
pod 'AgoraRtm', '2.2.0'
end
该版本在 AgoraRtmClientConfig
中新增 privateConfig
参数,用于实现私有化部署功能。详见私有化配置。
该版本在 AgoraRtmClientConfig
中新增 heartbeatInterval
参数,用于配置 SDK 向 RTM 服务器发送心跳包的时间间隔。详见 Heartbeat Interval 与 Presence Timeout。
该版本在 AgoraRtmClientConfig
中新增 protocolType
参数,用于自定义网络传输协议,以便于更好地适配你的网络环境。详见连接协议配置。
该版本在 AgoraRtmChannelType
中新增 AgoraRtmChannelTypeUser
类型,用于向指定用户发送消息。该功能可以替代 v1 的点对点消息功能。详见在 User Channel 中发送消息。
该版本在 AgoraRtmSubscribeChannelFeature
中新增 AgoraRtmSubscribeChannelFeatureBeQuiet
枚举,在 AgoraRtmJoinChannelFeature
中新增 AgoraRtmJoinChannelFeatureBeQuiet
枚举,用于设置静默订阅或加入频道。设置成功后,频道中其他用户无法感知该用户的出席状态。
该版本新增 didReceiveLinkStateEvent
回调,用于替代废弃的 connectionChangedToState
回调,以便更好地管理连接状态。详见连接管理。
该版本改进了 Presence 功能的 AgoraRtmPresenceEventTypeRemoteStateChanged
事件的触发逻辑,即当用户一次设置或修改多个 key-value 时,频道内其他用户只会接收到一次事件通知。
该版本在如下数据结构中新增 timestamp
参数,报告触发事件通知的时间戳:
AgoraRtmMessageEvent
AgoraRtmPresenceEvent
AgoraRtmTopicEvent
AgoraRtmStorageEvent
AgoraRtmLockEvent
该版本优化了以下 API 的行为:
loginByToken
:- 在之前版本中,不支持连续多次调用该方法;也不支持在该方法的
token
参数中传入空字符串。 - 自 2.2.0 版本起,支持连续多次调用该方法,中间无需额外调用
logout
方法。此外,当token
参数为空字符串时,SDK 会默认使用你初始化时传入的 App ID 替代 Token。
- 在之前版本中,不支持连续多次调用该方法;也不支持在该方法的
subscribeWithChannel
:- 在之前版本中,不支持连续多次调用该方法。
- 自 2.2.0 版本起,支持连续多次调用该方法。
joinWithOption
:- 在之前版本中,不支持连续多次调用该方法,也不支持在该方法的
token
参数中传入空字符串。 - 自 2.2.0 版本起,支持连续多次调用该方法。此外,当
token
参数为空字符串时,SDK 会默认使用你初始化时传入的 App ID 替代 Token。
- 在之前版本中,不支持连续多次调用该方法,也不支持在该方法的
该版本将 AgoraRtmClientConfig
中 presenceTimeout
参数的取值范围由 [10,300] 修改为 [5,300]。
2.1.12 版
该版本于 2024 年 6 月 7 日发布。
该版本进行了如下改进:
- 在因网络原因导致数据同步出错的情况下,该版本增加了用户退出机制,SDK 会自动登出 RTM 系统。
- 断网期间取消订阅,不再返回取消订阅失败的错误。
该版本修复了如下问题:
- 弱网条件下,断线期间用户取消订阅 Message Channel 出错。
- 弱网条件下,登录成功后,偶现无法收到回调。
- 断线重连情况下,偶现丢失
didReceiveStorageEvent
事件通知。 - 断线重连情况下,偶现无法恢复 Stream Channel 中的订阅关系。
- 偶现收不到 Web 端的 Topic 消息。
2.1.11 版
该版本于 2024 年 4 月 30 日发布。
为满足 Apple 对于 App 发布的安全合规要求,SDK 自该版本起新增隐私清单文件 PrivacyInfo.xcprivacy
,其中包含 SDK 中需要访问或使用用户数据的 API 调用说明和 SDK 采集的数据类型说明。
如果你需要将集成 v2.1.10 之前的 SDK 版本的 App 发布到苹果应用商店,则需要在 Xcode 工程中手动添加 PrivacyInfo.xcprivacy
文件。详见如何在 App 中增加隐私清单?
该版本优化了使用 AgoraRtmSubscribeChannelFeaturePresence
订阅频道或使用 AgoraRtmJoinChannelFeaturePresence
加入频道时的响应机制。如果 5 秒内未收到 AgoraRtmPresenceEventTypeSnapshot
类型的 didReceivePresenceEvent
事件通知,则 SDK 会在 completion
参数中报告 AgoraRtmErrorChannelPresenceNotReady
错误码。
该版本修复了如下问题:
- 特定场景下,登出 RTM 系统后再次登录,然后使用
AgoraRtmSubscribeChannelFeaturePresence
订阅频道或使用AgoraRtmJoinChannelFeaturePresence
加入频道时,偶现订阅或加入频道失败。 - 由网络问题导致连接断开并恢复的情况下,本地用户主动调用
leave
离开频道,偶现远端用户收不到AgoraRtmPresenceEventTypeRemoteConnectionTimeout
类型的didReceivePresenceEvent
事件通知。 - 频繁调用
subscribeWithChannel
和unsubscribeWithChannel
方法,偶现调用失败。
2.1.10 版
该版本于 2024 年 2 月 26 日发布。
该版本修复了如下问题:
- 频繁发送消息时,偶现消息发送超时。
- 调用
renewToken
刷新 Token,因部分服务未能生效而导致非预期的连接断开。
2.1.9 版
该版本于 2024 年 1 月 10 日发布。
该版本优化了在断线重连时对过期用户状态数据的处理逻辑。
该版本修复了初始化时的内存泄露问题。
2.1.8 版
该版本于 2023 年 12 月 4 日发布。
该版本对消息发送选项进行了如下优化,请在升级到该版本后更新 App 代码:
- 在
AgoraRtmPublishOptions
中删除了sendTs
参数,并新增了channelType
参数。详见AgoraRtmPublishOptions
。 - 将
publishTopicMessage
方法中的options
参数类型由AgoraRtmPublishOptions
修改为AgoraRtmTopicMessageOptions
。详见AgoraRtmTopicMessageOptions
。
该版本新增了 AgoraRtmErrorInvalidChannelType
、AgoraRtmErrorInvalidEncryptionParameter
和 AgoraRtmErrorOperationRateExceedLimitation
错误码。错误码描述及解决方法见错误排查。
该版本修复了如下问题:
- 初始化时
encryptionKdfSalt
参数长度不为 32 字节,未返回初始化失败。 - 调用
whoNow
方法返回分页结果时,偶现崩溃。
2.1.7 版
该版本于 2023 年 10 月 20 日发布。
该版本优化了内存表现并修复了潜在的内存泄漏问题。
该版本修复了如下问题:
- 特定场景下,偶现 Presence 数据丢包。
- 特定场景下,方法调用后未触发异步回调。
- 使用端侧加密时,参数无效导致的崩溃。
- 特定场景下,直接销毁 RTM 实例导致的 ANR (Application Not Responding) 问题。
2.1.6 版
该版本于 2023 年 9 月 19 日发布。
该版本对部分功能的实现方式进行了优化,请在升级到该版本后更新 App 代码。
为提醒用户在初始化时设置必填参数,该版本新增如下方法:
- 在
AgoraRtmMetadata
中新增init
方法,禁止用户不填参数就初始化。 - 在
AgoraRtmProxyConfig
中新增init
和initWithServer
方法,要求用户在初始化时填写server
、port
和proxyType
参数。 - 在
AgoraRtmClientConfig
中新增init
和initWithAppId
方法,要求用户在初始化时填写appId
和userId
参数。
该版本对 AgoraRtmJoinChannelOption
和 AgoraRtmSubscribeOptions
类进行了如下修改:
- 在
AgoraRtmJoinChannelOption
中删除了withMetadata
、withPresence
和withLock
参数,并新增features
参数替代。根据需要,你可以在features
参数中设置一种或多种事件通知。 - 在
AgoraRtmSubscribeOptions
中删除了withMessage
、withMetadata
、withPresence
和withLock
参数,并新增features
参数替代。根据需要,你可以在features
参数中设置一种或多种事件通知。
此外,该版本提升了在 AgoraRtmJoinChannelOption
中设置 Presence 事件通知的性能。
该版本修改了如下回调的名称:
v2.1.6 之前 | v2.1.6 |
---|---|
onMessageEvent | didReceiveMessageEvent |
onPresenceEvent | didReceivePresenceEvent |
onLockEvent | didReceiveLockEvent |
onStorageEvent | didReceiveStorageEvent |
onTopicEvent | didReceiveTopicEvent |
onTokenPrivilegeWillExpire | tokenPrivilegeWillExpire |
connectionStateChanged | connectionChangedToState |
此外,该版本还将 removeState
方法的 items
参数更名为 keys
,将 areaCode
参数类型由 unsigned int
修改为 AgoraRtmAreaCode
。
该版本新增 addDelegate
和 removeDelegate
方法。除了在初始化时添加或删除事件监听外,你还可以调用新增方法在 App 生命周期的任意时间添加、删除一个或多个事件监听对象。
该版本新增 publish
和 publishTopicMessage
方法的同名方法,并修改了原方法中 message
参数的类型。详情如下:
// v2.1.6 之前
// message 参数类型为 NSObject,支持传入字符串和二进制消息
- (void) publish: (NSString* _Nonnull)channelName
message: (NSObject* _Nonnull)message
withOption: (AgoraRtmPublishOptions* _Nullable)publishOption
completion: (AgoraRtmOperationBlock _Nullable)completionBlock;
- (void) publishTopicMessage: (NSObject * _Nonnull) message
inTopic: (NSString * _Nonnull) topic
withOption:(AgoraRtmPublishOptions * _Nullable) options
completion: (AgoraRtmOperationBlock _Nullable)completionBlock;
// v2.1.6
// message 参数分为 NSString 和 NSData 类型
// NSString 类型仅支持传入字符串数据
// NSData 类型仅支持传入二进制数据
// publish[1/2]
- (void) publish:(NSString* _Nonnull)channelName
message:(NSString* _Nonnull)message
option:(AgoraRtmPublishOptions* _Nullable)publishOption
completion:(AgoraRtmOperationBlock _Nullable)completionBlock
// publish[2/2]
- (void) publish:(NSString* _Nonnull)channelName
data:(NSData* _Nonnull)data
option:(AgoraRtmPublishOptions* _Nullable)publishOption
completion:(AgoraRtmOperationBlock _Nullable)completionBlock
// publishTopicMessage[1/2]
- (void) publishTopicMessage:(NSString * _Nonnull)topic
message:(NSString * _Nonnull)message
option:(AgoraRtmPublishOptions * _Nullable)options
completion:(AgoraRtmOperationBlock _Nullable)completionBlock
// publishTopicMessage[2/2]
- (void) publishTopicMessage:(NSString * _Nonnull)topic
data:(NSData * _Nonnull)data
option:(AgoraRtmPublishOptions * _Nullable)options
completion:(AgoraRtmOperationBlock _Nullable)completionBlock
该方法在 AgoraRtmMessage
类中删除了 getData
方法、getType
方法和 AgoraRtmMessageType
类,新增了 rawData
和 stringData
属性,分别用于接收二进制消息和字符串消息。
该版本优化了各方法中 completion
回调函数返回的信息:
- 如果方法调用成功,则会在
response
参数中返回对应数据,在errorInfo
参数中返回nil
。 - 如果方法调用失败,则会在
response
参数中返回nil
,在errorInfo
参数中返回错误信息。
此外,该版本在 initWithConfig
和 createStreamChannel
方法中新增 error
参数,用于输出方法调用失败的错误描述,方便排查问题。
该版本修复了如下问题:
- 当网络状态发生变化时,偶现无法登出 RTM 系统。
- 登出 RTM 系统后,当网络状态发生变化时,偶现无法登录 RTM 系统。
- 网络断开后,因数据未清理导致偶现用户无法收到
Snapshot
事件通知。 - 用户加入频道后,把 App 切到后台再切换回前台时,偶现 SDK 多次触发
REMOTE_JOIN
事件通知。
2.1.4 版
该版本于 2023 年 8 月 16 日发布。这是 RTM v2 Objective-C SDK 的第一个版本。
本次发布意味着声网实时通讯(RTM)产品步入 v2 时代,我们在功能覆盖、性能提升、体验优化上都将为用户带来革新。
-
功能覆盖:该版本通过引入频道(Channel)、消息(Message)、Topic、Presence、Storage 和 Lock 等功能模块,能覆盖更多业务场景,你可以把更多的精力集中在自己的业务创新上。
-
性能提升:我们在新版本中重构了后台架构,通过优化网络连接进一步提升性能,提供长时间低延迟、高可靠、大并发、易扩展的实时网络接入能力,让你无需为业务质量担忧。
-
体验优化:我们重新设计并简化了 API 接口;优化了包括用户指南、API 参考在内的所有文档,提供了更全面的示例程序,支持开发者低成本学习使用 SDK,快速完成集成,提高开发效率。
该版本提供的核心功能模块如下。
RTM 2.1.4 目前处于 Public Beta 阶段,某些功能细节可能会在随后的版本中发生改变,以提升用户体验。
初始配置(Setup)是初始化生产 RTM Client 时预先定义或配置一些关键参数,影响其后续的行为。同时它还提供了登入、登出等功能。核心能力如下:
initWithConfig
:创建一个 RTM Client 实例,并进行如下初始配置:appId
:设置 App ID。相同 App ID 的 App 间可以通信,不同 App ID 的 App 相互隔离。userId
:设置用户 ID,用以区分用户或设备。areaCode
:设置区域代码,用于 Geo-fencing 功能。presenceTimeout
:设置 Presence 服务的超时时间。useStringUserId
:设置用户 ID 的数据类型,可以是 String 类型,也可以是 Uint 类型。logConfig
:配置本地日志大小、位置、输出信息等级等参数。proxyConfig
:配置 Proxy 服务参数。encryptionConfig
:配置端侧加密参数。
- 事件监听:实现
onMessageEvent
、onPresenceEvent
、onTopicEvent
、onStorageEvent
、onLockEvent
、connectionStateChanged
、onTokenPrivilegeWillExpire
等事件通知的业务逻辑。 loginByToken
:登录 RTM 服务。logout
:登出 RTM 服务。destroy
:销毁 RTM Client 实例,释放资源。
频道是 RTM 实时网络中一种数据传输的管理机制,任何订阅或加入频道的用户都可以在 100 毫秒内接收到频道中传输的消息和事件,RTM 允许客户端订阅数百甚至数千个频道。大多数 RTM API 都将以频道为基础进行发送、接收、加密等行为。
基于声网的能力,RTM 的频道分成两种类型:Message Channel 和 Stream Channel。两种类型频道的核心能力如下:
-
Message Channel:
subscribeWithChannel
:订阅指定 Message Channel 并开始接收频道中的消息和事件通知。unsubscribeWithChannel
:取消订阅指定 Message Channel 并停止接收频道中的消息和事件通知。
-
Stream Channel:
createStreamChannel
:创建 Stream Channel 实例,随后可以调用其中的方法。joinWithOption
:加入 Stream Channel,并开始接收频道中的消息和事件通知。leave
:离开 Stream Channel,并停止接收频道中的消息和事件通知。destroy
:销毁 Stream Channel 实例以释放资源。
其中:
subscribeWithChannel
、unsubscribeWithChannel
、joinWithOption
、leave
方法都会触发onPresenceEvent
事件通知。频道中的其他用户会收到对应的Join
、Leave
事件通知。- 调用
subscribeWithChannel
和joinWithOption
操作订阅或加入频道的时候,可以选择是否配置withMessage
、withPresence
、withMetadata
、withLock
等参数以开启对应事件通知的监听功能。如果开启,你同时也需要注册对应事件监听,才能顺利收到对应事件通知。
RTM 的基础是发送消息的能力,你可以随时随地向频道中发送消息,消息会在 100 毫秒内传递到任何地方。RTM 支持 String 类型和 Byte 类型的消息负载。
publish
向指定的 Message Channel 中发送消息。调用 publish
会触发 onMessageEvent
事件通知,如果想要收到频道中的消息,你需要在 subscribeWithChannel
的时候,设置 withMessage = true
,注册并实现 onMessageEvent
事件。
Topic 是 Stream Channel 中的数据流管理机制。你可以在 Stream Channel 中利用此特性进行数据流的订阅、分发、事件通知等,灵活使用 Topic 能力,能大大降低业务复杂度,提升开发效率。Topic 的主要功能如下:
joinTopic
:注册成为此 Topic 的消息发布者(publisher)。注册后,该用户会具备发送消息的能力。publishTopicMessage
:向 Stream Channel 中的 Topic 发送消息。leaveTopic
: 取消注册为该 Topic 的消息发布者。subscribeTopic
:订阅该频道中 Topic 的一名或多名消息发布者。unsubscribeTopic
:取消订阅该 Topic 或取消订阅该 Topic 中指定的一名或多名消息发布者。
注册(joinTopic
)或取消注册(leaveTopic
)消息发布者操作,会触发 onTopicEvent
事件通知,频道中的其他用户将会收到此事件通知。
Topic 特性只在 Stream Channel 中有效,Message Channel 中不存在此特性。
Presence 提供监控用户在线状态及临时状态变化的能力。通过 Presence 功能,你可以实时获取以下信息:
- 用户加入或离开频道的实时状态
- 订阅或加入同一频道的所有用户的实时状态
- 一个用户订阅或加入的所有频道的实时信息
- 自定义临时用户状态及其变更信息
在 Message Channel 和 Stream Channel 中均可使用以下 Presence 功能:
whoNow
:实时获取指定频道的在线用户数量、在线用户列表、在线用户的临时状态等信息。whereNow
:实时获取指定用户所在频道的列表。setState
:设置用户在指定频道的临时状态。getState
:获取用户在指定频道的临时状态。removeState
:删除用户在特定频道的临时状态。
Presence 在提供上述功能的同时,也提供了 onPresenceEvent
事件通知能力。频道中用户的加入、离开、掉线、用户状态设置、用户状态删除等事件都会以实时通知(Announce Mode)或定时通知(Interval Mode)的方式通知到频道中的其他用户。Presence 能力将大大简化开发者业务中关于在线用户上下线、状态变更等状态的同步逻辑实现,充分利用此特性将使得你的业务实现更稳定、实时、可靠。
RTM 的 Storage 功能提供了一套动态数据库机制,可以让开发者动态设置、存储、更新、删除 Channel Metadata 和 User Metadata 等数据,并监听由 Channel Metadata 或 User Metadata 变更而产生的事件通知。
Channel Metadata
setChannelMetadata
:为指定频道设置 Channel Metadata 或 Channel Metadata Item。getChannelMetadata
:获取指定频道的 Channel Metadata 和 Channel Metadata Item。removeChannelMetadata
:删除指定频道的 Channel Metadata 或 Channel Metadata Item。updateChannelMetadata
:更新指定频道已有 Channel Metadata 或 Channel Metadata Item。
Channel Metadata 的设置、删除和更新都会触发 onStorageEvent
事件通知,合理使用此特性可以极大的优化业务逻辑,获得优异的用户体验。当前 onStorageEvent
事件通知中携带的是当前 Channel Metadata 的全量信息,我们将在后续版本中优化,提供性能更优的增量更新能力。
Channel Metadata 同时也引入了 Lock 的控制能力,当调用 API 设置、删除、更新 Channel Metadata 时,如果参数中的 lock
被设置,则开启 Lock 的校验,此时只有拥有此锁的用户才被允许成功调用对应的方法。
User Metadata
setUserMetadata
:设置指定用户的 User Metadata 或 User Metadata Item。getUserMetadata
:获取指定用户的 User Metadata 和 User Metadata Item。removeUserMetadata
:删除指定用户的 User Metadata 或 User Metadata Item。updateUserMetadata
:更新指定用户已存在的 User Metadata 或 User Metadata Item。subscribeUserMetadata
:订阅指定用户的 User Metadata 或 User Metadata Item 变更事件通知。unsubscribeUserMetadata
:取消订阅指定用户的 User Metadata 或 User Metadata Item 事件通知。
User Metadata 的设置、删除和更新都会触发 onStorageEvent
事件通知,所有订阅此 User Metadata 的其他用户将会收到事件通知,合理使用此特性可以极大的优化业务逻辑,获得优异的用户体验。当前 onStorageEvent
事件通知中携带的是所订阅 User Metadata 的全量信息,我们将在后续的版本中优化,提供性能更优的增量更新能力。
CAS 控制
Channel Metadata 和 User Metadata 都引进了版本控制逻辑 CAS(Compare And Set),该方法提供两种独立的版本控制字段,你可以根据实际业务场景设置任意一种或多种:
- 通过
AgoraRtmMetadata
中的setMajorRevision
方法设置majorRevision
属性开启整组 Channel Metadata 的版本号校验。 - 通过
AgoraRtmMetadataItem
中的revision
属性开启某个 Metadata Item 的版本号校验。
设置、删除、更新 Channel Metadata 或 User Metadata 时,配合 revision
参数可以控制本次调用是否开启 Revision 校验,逻辑如下:
majorRevision
或revision
为-1
时,本次调用不开启 CAS 验证。如果 Metadata 或 Metadata Item 已存在,则该 Metadata 或 Metadata Item 会被最新值覆盖;如果 Metadata 或 Metadata Item 不存在,则会创建对应的 Metadata 或 Metadata Item。majorRevision
或revision
为 Uint64 正整数时,本次调用开启 CAS 验证。如果 Metadata 或 Metadata Item 已存在,则 SDK 会在版本号验证成功后更新对应的值;如果 Metadata 或 Metadata Item 不存在,则 SDK 会返回错误码。
临界资源一次只能供一个进程使用,如果不同的进程之间共享了某个临界资源,则各进程需要采取互斥的方式来防止彼此干扰。RTM 提供一整套 Lock 的方案,通过控制分布式系统的不同进程,你可以解决用户在访问共享资源时的竞争问题。Lock 为你提供了以下能力:
setLock
:为指定频道设置锁。acquireLock
:获取指定频道中指定的锁。releaseLock
: 释放指定频道中指定的锁。revokeLock
: 撤销指定频道中某个用户对此锁的占用权限以释放此锁。getLocks
: 获取指定频道中所有锁的详情。removeLock
:删除指定频道中指定的锁。
频道中锁的设置、获取、释放、撤销和删除操作都会上报对应的 onLockEvent
事件通知。你可以充分利用此特性优化业务的实现逻辑。