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

前提条件

需要提前在应用管理页面获取应用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.aliyun.live20161101.Client;
import com.aliyun.live20161101.models.GetMessageTokenRequest;
import com.aliyun.live20161101.models.GetMessageTokenResponse;
import com.aliyun.teaopenapi.models.Config;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Test {

    public static void main(String[] args){

        // API Config
        Config config = new Config();

        config.accessKeyId = "yourAccessKeyId";
        config.accessKeySecret = "yourAccessKeySecret";
        config.endpoint = "live.aliyuncs.com";

        // Input Parameters
        String appId = "********"; // 必传,在控制台创建应用后获取的应用ID。包含小写字母、数字,长度为6个字符。
        String userId = "*****"; // 在AppId下单独唯一。小写英文、数字、下划线(_)和小数点(.)组成,最大长度32个字符。
        String deviceId = "******"; // 小写英文、数字、下划线(_)和短横线(-)组成,最大长度64个字符。
        String deviceType = "******"; // 设备类型,ios|android|web|pc

        try {
            Client client = new Client(config);

            GetMessageTokenRequest request = new GetMessageTokenRequest();
            request.setAppId(appId);
            request.setUserId(userId);
            request.setDeviceId(deviceId);
            request.setDeviceType(deviceType);
            GetMessageTokenResponse response = client.getMessageToken(request);

            // 判断是否请求失败
            if (null == response) {
                // .....失败逻辑
            }

            // ....成功逻辑
            log.info("GetMessageToken response is : {}", JSON.toJSONString(response));

        } catch (Exception e) {
            // 异常处理
            e.printStackTrace();
        }
    }
}