后端开发
说明
这里将使用 NodeJS 来开发我们实时音视频应用需要的后端服务,如果您不熟悉后端开发或者 NodeJS,可以先从这里 下载并安装 NodeJS 到您的机器。下面的代码不会很复杂,一个基本的后端服务是我们开发前端应用的基础,希望您可以按照流程完成后端开发的步骤。
首先简单介绍一下 roomToken,roomToken 是一个包含了一次连麦所需要的主要信息的 token,这些信息包括 七牛的账户标识、连麦的应用id(appId)、连麦的房间号(roomName)、连麦的用户名(userId)、连麦用户的权限(是否可以踢人)等等。这个 token 通过自己七牛账户的私钥进行加密,因为涉及到私钥加密,所以计算 roomToken 的工作不能放在客户端(前端), 所以这里我们需要搭建一个后台为我们计算 roomToken。
顺便也需要一个后台为我们的前端代码提供静态服务,所以这里我们的后端就是实现 2 个功能:
- 提供计算 roomToken 的接口
- 一个 http 静态服务
Express 静态服务
准备两个同级的文件夹 app 和 server,前者会放置我们的前端代码,后者放置我们的后端代码。我们首先起一个 Express 服务来为 app 文件夹提供 http 静态服务。 让我们首先进入 server 文件夹并打开命令行窗口(确保命令行目前在 server 目录下)
npm init # 初始化 npm,一直回车即可
npm install express --save
让我们在 server 目录下创建文件 index.js 写入如下代码
// index.js
const express = require('express');
const path = require('path');
const app = express();
// 在 app 文件夹开启静态服务
app.use(express.static('../app'));
app.listen(8888, () => {
console.log('Demo server listening on port 8888');
});
在刚刚的命令行里运行 node index.js
开启服务。看到 Demo server listening on port 8888
说明服务开启。
您可以尝试在 app 文件夹下创建一个 index.html
文件,一切正常的话访问 http://localhost:8888
就能看到您刚刚创建的 index.html
了
RoomToken 接口
计算 roomToken 是个复杂的过程,不过通过七牛的 NodeJS SDK 我们可以很快完成这个步骤(如果您想详细了解 roomToken 的计算过程,参见这里)。同上文所说,一个 roomToken 包含了一次连麦的主要信息,所以在计算 roomToken 之前我们需要前端给我们提供部分信息。这里主要包括 3 个信息:连麦的房间号、连麦的用户名、连麦用户的权限,其他信息比如 七牛账户信息、连麦 app 信息等都是在后端提前配置好固定下来的,不需要前端动态提供。
本篇教程出于简单考虑,默认给予所有用户 admin 的权限,即所有用户都有踢人的权限,方便我们后文演示功能。所以梳理下来,这个 roomToken 我们需要前端为我们提供 2 个信息,即 连麦房间号 和 连麦用户名。
继续在刚刚的命令行下输入以下命令,安装七牛的 NodeJS SDK
npm install qiniu --save # 安装七牛 NodeJS SDK
修改我们刚刚创建的 index.js,在文件末尾加入如下代码
// index.js
const qiniu = require('qiniu');
const QINIU_AK = '<填写您七牛账户的 AK>';
const QINIU_SK = '<填写您七牛账户的 SK>';
const QINIU_RTN_APPID = '<填写您的连麦 APPID>';
const QINIU_CREDENTIALS = new qiniu.Credentials(QINIU_AK, QINIU_SK);
app.get('/roomtoken/user/:userid/room/:roomname', (req, res) => {
const userId = req.params.userid;
const roomName = req.params.roomname;
const roomToken = qiniu.room.getRoomToken({
appId: QINIU_RTN_APPID,
roomName: roomName,
userId: userId,
expireAt: Date.now() + (1000 * 60 * 60 * 3), // token 的过期时间默认为当前时间之后 3 小时
permission: 'admin', // 默认所有的用户权限都是 admin,都可以踢人
}, QINIU_CREDENTIALS);
res.send(roomToken);
});
其中 AK/SK 在控制台界面 管理面板-密钥管理 里可以查看,连麦 APPID 为实时音视频云中您创建的连麦应用 ID。
一切顺利的话,再次启动后台,访问 http://localhost:8888/roomtoken/user/testuser/room/testroom 就能看到 roomToken的返回。 现在我们可以指定用户名和房间名构造一个请求来获取相应的 roomToken 了。
至此,我们完成了后台的开发工作。下面的代码我们暂定您的后台一直处于运行状态。