文档

建立长连接

本文介绍服务端与客户端建立长连接的方法。

前提条件

需要提前在应用管理页面获取应用ID信息,请参见创建应用

技术原理

客户端和视频直播互动服务端需要基于长连接通讯,长连接通讯需要事先获取建连Token,客户端可以用此Token通过协议和各个原子能力进行长连接通信。

  1. 获取建连Token。

    • 客户端请求用户自己的AppServer获取建立长连接的messageToken。

    • AppServer通过直播服务端的GetMessageToken (获取长连接建连Token接口)请求messageToken。

    • 直播服务端根据GetMessageToken (获取长连接建连Token接口)接口传递的业务参数生成messageToken并返回给用户的AppServer。

    • AppServer拿到accessToken之后,将结果返回给客户端。

  2. 建立长连接,客户端通过上述步骤获取的accessToken与本产品的直播后端服务建立起长连接。

    说明

    建立长连接由客户端发起,详细操作请参见客户端文档

  3. 客户端使用长连接调用直播服务端能力。

获取建连Token示例代码(Java)

利用服务端SDK获取建连Token的基本流程为:

  1. 集成服务端SDK。

  2. 调用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());
        }
    }
}
  • 本页导读 (1)