初探webRTC(2)--websocket+信令服务器

webRTC 背景知识

建立一个简单的 webRTC 应用

webSocket 与初识信令服务器

首先安装一个支持 webSocket 的库 ws
1
2
npm i -g ws
npm i -g wscat

下面来测试一下 ws
我们在服务端输入一下代码

1
2
3
4
5
6
7
8
9
var WebSocketServer = require("ws").Server,
wss = new WebSocketServer({ port: 8888 });
wss.on("connection", function(connection) {
console.log("user connected");
connection.on("message", function(message) {
console.log("get message", message);
});
connection.send("hello world");
});

完成之后使用 node test.js 运行这个服务
同时在一个新的终端下面运行 wscat -c ws://localhost:8888
成功之后服务端会输出 user connected
客户端会输出服务端 send 的 hello world

发起通话

这里需要理解发起通话时通过什么来完成的,这里我们将其写到获取 data 的 type 中去识别,在 users 中查找被呼叫者的 id,然后建立 connection,发送期内容,这里的服务端其实相当于一个中转。

1
2
3
4
5
6
7
8
9
10
11
12
case "offer":
console.log("sending offer to", data.name);
var conn = users[data.name];
if (conn != null) {
connection.otherName = data.name;
sendTo(conn, {
type: "offer",
offer: data.offer,
name: connection.name
});
}
break;
呼叫应答

有了上一节的简单理解,被呼叫者的表现即为收到服务端的消息,我们在’offer’的 case 之后再增加’answer’,如下

1
2
3
4
5
6
7
8
9
10
11
case "answer":
console.log("sending answer to ", data.name);
var conn = users[data.name];
if (conn != null) {
connection.otherName = data.name;
senTo(conn, {
type: "answer",
answer: data.answer
});
}
break;

代码几乎一致,因为说到底,他们都只是会话的不同形式。

处理 ICE 候选路径
呼叫挂断

这个步骤不涉及 webRTC 的规范的,在进行挂断之后,便可以让我们的用户从一方断开,呼叫其他用户。

在完成项目的步骤之后,我们进行测试,在不同的客户端通过 es 进行通信,效果如下
客户端通信与响应

服务端的响应如下
服务端响应