本文介绍服务端与客户端建立长连接的方法。
前提条件
需要提前在应用管理页面获取应用ID信息,请参见创建应用。
技术原理
客户端和视频直播互动服务端需要基于长连接通讯,长连接通讯需要事先获取建连Token,客户端可以用此Token通过协议和各个原子能力进行长连接通信。
获取建连Token。
客户端请求用户自己的AppServer获取建立长连接的messageToken。
AppServer通过直播服务端的GetMessageToken (获取长连接建连Token接口)请求messageToken。
直播服务端根据GetMessageToken (获取长连接建连Token接口)接口传递的业务参数生成messageToken并返回给用户的AppServer。
AppServer拿到accessToken之后,将结果返回给客户端。
建立长连接,客户端通过上述步骤获取的accessToken与本产品的直播后端服务建立起长连接。
说明建立长连接由客户端发起,详细操作请参见客户端文档。
客户端使用长连接调用直播服务端能力。
获取建连Token示例代码(Java)
利用服务端SDK获取建连Token的基本流程为:
集成服务端SDK。
调用GetMessageToken (获取长连接建连Token接口)获取建连Token。
以下代码为Java语言为例展示如何获取建连Token。请确保参考示例代码前已完成服务端集成。集成步骤请参见开发者门户。
说明
多语言的示例代码请参见开发者门户。
AccessKey ID和AccessKey Secret获取方式,请参见创建AccessKey。
Endpoint(服务接入地址)需要根据您的直播中心区域填写,具体请参见请求结构中服务地址。
import com.alibaba.fastjson.JSON;
import com.alyun.live.test.Application;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.live.model.v20161101.GetMessageTokenRequest;
import com.aliyuncs.live.model.v20161101.GetMessageTokenResponse;
import com.aliyuncs.profile.DefaultProfile;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest(classes = Application.class)
@RunWith(SpringRunner.class)
public class TestMessage {
@Value("${live.accessKeyId}")
private String accessKeyId;
@Value("${live.accessKeySecret}")
private String accessKeySecret;
DefaultAcsClient client;
@Before
public void initClient() throws Exception {
// 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
// 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
// 本示例通过从配置文件中读取AccessKey,来实现API访问的身份验证。如何配置文件,请参见https://help.aliyun.com/document_detail/53270.html。
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
client = new DefaultAcsClient(profile);
}
@Test
public void testGetMessageToken(){
GetMessageTokenRequest request = new GetMessageTokenRequest();
// Input Parameters
String appId = "********"; // 必传,在控制台创建应用后获取的应用ID。包含小写字母、数字,长度为6个字符。
String userId = "*****"; // 在AppId下单独唯一。小写英文、数字、下划线(_)和小数点(.)组成,最大长度32个字符。
String deviceId = "******"; // 小写英文、数字、下划线(_)和短横线(-)组成,最大长度64个字符。
String deviceType = "******"; // 设备类型,ios|android|web|pc
try {
request.setAppId(appId);
request.setUserId(userId);
request.setDeviceId(deviceId);
request.setDeviceType(deviceType);
GetMessageTokenResponse response = client.getAcsResponse(request);
System.out.println(JSON.toJSONString(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
}
文档内容是否对您有帮助?