虚拟人的位置实时更新、动作捕捉数据同步、面部表情数据同步、场景切换甚至区块链和WEB3.0,RTM 都可以提供安全、有效、规模可扩展的实时传输方案
不要让你的游戏客户流失到第三社交应用中,使用 我们的API和 SDK构建自己的社交应用,让玩家可以时刻保持互动。
使用 RTM 构建在线互动课堂,连接教师、学生和家长,为他们提供一整套安全、可靠、实时互动的在线学习方案。
无论是直播带货还是在线拍卖,RTM都能提供安全、稳定、可靠的实时互动机制,有效提升用户购物体验。
向世界各地的用户提供互动直播媒体内容,让你的观众实时参与你的活动并收集他们反馈的数据,无论用户规模多大,都能获得一致体验。
我们功能齐全的 SDK 让您只需几行代码即可轻松构建虚拟白板、文档协作等应用。无需从头开始重新架构。无需建设基础设施。
依赖RTM服务的高可靠和高可用性,构建可实时监控的全球物联网系统,提升物联网应用的新体验。
从远程问诊到 EHR 解决方案,甚至互联网健身应用,RTM 都将有效提升健康咨询、医患沟通、协作与激励的实时互动体验。
使用RTM 可以轻松构建基于实时临近匹配、位置跟踪、聊天互动、实时通知的位置应用APP,优化调度和交付。
RTM 将帮助你构建具备实时性的互联网金融应用程序,为用户提供更好、更快、更安全的实时体验。
从无人采矿车、平行清扫车到平行飞行器,甚至遥控玩具,RTM 都能提供极致实时数据流传输方案,最低20毫秒的传输延迟和高可靠性让平操控如真人操控一般丝滑。
使用RTM机制可靠的实时服务,你将可以轻松构建实时公共服务APP,例如水、电、煤气等用量查询,实时公交、航班信息发布等等。
全球节点部署,提供覆盖超过全球200多个国家和地区的高质量实时云信令服务。
高可靠设计,多机房多路保活机制,在70%丢包的弱网环境下,也能保证消息达到率。
全球海量数据分发与状态同步延迟< 100ms(99分位值),同区域往返延迟 < 50ms
并发人数无上限,支持超过1000亿级消息并发能力,单频道支持100万并发。
提供超过99.99%正常运行时间 SLA 保证,非常可靠且可用。
提供内容审核、实时翻译、云存储、消息推送、Chatbot 等丰富的三方插件
通过声网水晶球,可提供实时数据监控、告警、分析与洞察功能。
多种安全加密手段,符合GDPR、CCPA、COPPA等全球性隐私安全法规要求。
我们重视API的易用性,并为各种场景应用提供广泛的教程。这就是我们的客户通常在几天内完成集成上线,而选择其他产品方案往往需要数月。
const { RTM } = AgoraRTM
const appId = “your_appId”
const userId = “your_userId”
const setupRTM = async () => {
try {
const rtm = new RTM(appId, userId)
rtm.addEventListener(“message”, event => {
console..log(event.publisher,event.message)
})
const result1 = awaitrtm.login()
const result2 = await rtm.subscribe(“Room1” )
await publishMessage(“Hello,World” )
} catch (status){}
const publishMessage = async (message) => {
try {
const result = await rtm.publish(“Room1”, message)
console..log(result)
await publishMessage(“Hello,World” )
} catch (status){
console..log(status)
}
window.onload = setupRTM
public class EventHandler implements RtmEventListener {
@Override
public void onMessageEvent ( MessageEvent event ) {}
}
String appId = “your_appId”
String userId = “your_userId”
RtmConfig rtmConfig = new RtmConfig.Builder( appId, userIdeventListener(new EventHandler() ).build()
rtmClient = RtmClient.create( rtmConfig )
String token = “your_token”
rtmClient. login ( token, new ResultCallback < Void> () {
@Override
public void onSuccess ( Void responseInfo ) {}
@Override
public void onFailure ( ErrorInfo errorInfo ) {}
})
String channelName = “Room1”
String message = “Hello World”
PublishOptions options = new PublishOptions()
rtmClient. publish ( channelName, message, options, new ResultCallback < Void> () {
@Override
public void onSuccess ( Void responseInfo ) {}
@Override
public void onFailure ( ErrorInfo errorInfo ) {}
})
@interface EvnetHandler : NSObject <AgoraRtmClientDelegate>
@end
@implementation EvnetHandler
– (void)rtmKit🙁AgoraRtmClientKit *)rtmKit didReceiveMessageEvent🙁AgoraRtmMessageEvent *)event {}
@end
NSString* appId = @“your_appId”
NSString* userId = @“your_userId”
AgoraRtmClientConfig* cfg = [[AgoraRtmClientConfig alloc] initWithAppId : appId userId : userId]
NSError* initError = nil
AgoraRtmClientKit* client = [[AgoraRtmClientKit alloc] initWithConfig : cfg delegate : &initError]
NSString* token = @“your_token”
[ client loginByToken :token completion :^( AgoraRtmCommonResponse * _Nullable response , AgoraRtmErrorInfo * _Nullable errorInfo ) {
if ( errorInfo == nil ) {
} else {
}
}]
publish message
NSString* channelName = @“Room1”
NSString* message = @“Hello World”
[ client publish :message option :nil completion :^( AgoraRtmCommonResponse * response , AgoraRtmErrorInfo* _Nullable errorInfo ) {
if ( errorInfo == nil ) {
} else {
}
}]
#include <mutex>
#include <condition_variable>
#include “IAgoraRtmClient.h”
using namespace std;
using namespace agora::rtm;
static const char* kAppName = “[rtm-demo]”;
mutex mtx;
condition_variable cv;
bool ready = false;
class RtmEventHandler : public IRtmEventHandler {
public:
void onMessageEvent(const IRtmEventHandler::MessageEvent &event) override {
printf(“%s: message event: %s \r\n”, kAppName, event.message);
}
void onLoginResult(RTM_ERROR_CODEerrorCode) override {
printf(“%s: login with error code: %d \r\n”, kAppName, errorCode);
if (errorCode == RTM_ERROR_OK) {
std ::unique_lock<std::mutex> lck(mtx);
ready = true;
cv.notify_all();
}
}
};
private string appId = “your_appId”
private string userId = “your_userId”
private string channelName = “ROOM1”
private IRtmClient rtmClient
public void Awake()
{
Initialize()
}
public async void Initialize()
{
RtmConfig config = new RtmConfig()
config.appId = appId
config.userId = userId
try {
rtmClient = RtmClient. CreateAgoraRtmClient . (config)
} catch (RTMException e) {
}
rtmClient. OnMessageEvent += OnMessageEvent
SubscribeOptions subscribeOptions = new SubscribeOptions ()
var result1 = await rtmClient. SubscribeAsync( channelName, subscribeOptions)
PublishOptions publishOptions = new PublishOptions ()
var result2 = await rtmClient. PublishAsync( channelName, “Hello,World” , subscribeOptions)
}
private void OnMessageEvent( MessageEvent eve)
{
Debug. Log( string. Format ( “Received message:{0} from :{1} “, eve. publisher, eve. message ))
}
功能丰富易用
客户风险分摊