断开长连接
本文介绍客户端SDK建立长连接前的断开长连接步骤。
说明
为降低客户端不必要的性能和流量消耗,建议在不需要使用直播功能时手动调用断开长连接的操作。
API使用示例
iOS端接口使用示例:
[[AIRBRoomEngine sharedInstance] logoutOnSuccess:^{
NSLog(@"登出成功");
} onFailure:^(NSString * _Nonnull errorMessage) {
NSLog(@"登出失败,%@", errorMessage)
}];
Android端接口使用示例:
// 参考代码, 抽象出断连的任务管理器, 以实现自动的断连操作
class LogoutTaskManager {
private static final String TAG = LogoutTaskManager.class.getSimpleName();
private static final int LOGOUT_DELAY_TIME = 3 * 60 * 1000;
private static final Runnable logoutTask = new Runnable() {
@Override
public void run() {
Logger.i(TAG, "start invoke logout task");
RoomEngine roomEngine = RoomEngine.getInstance();
if (roomEngine.isLogin()) {
Logger.i(TAG, "prepare done, start logout");
// 断连的实际调用逻辑
roomEngine.logout(null);
}
}
};
// 在直播页面的onDestroy中调用, 为防止频繁建连、断连,这里做了3分钟的延时处理
static void prepareLogout() {
Logger.i(TAG, "prepare logout");
cancelLogout();
if (RoomEngine.getInstance().isLogin()) {
// 离开直播间超过3分钟, 自动执行断连操作
ThreadUtil.postDelay(LOGOUT_DELAY_TIME, logoutTask);
}
}
// 在直播页面的onCreate中调用, 用来取消自动断连的逻辑
static void cancelLogout() {
Logger.i(TAG, "cancel logout");
ThreadUtil.cancel(logoutTask);
}
}
Web端接口使用示例:
RoomEngine.getInstance().logout(); // 返回promise
Windows端接口使用示例:
auto meta_space = alibaba::meta_space::MetaSpace::GetInstance();
meta_space->Logout(
uid, []() { },
[](const alibaba::dps::DPSError& error_msg) { });