Joiner 加入频道
现在,让我们找出第二个同伴加入该频道时发生的情况。 相关的动作顺序如 图5-9 所示。
该图的第一部分反映了发起方的行为,提示用户输入频道名称,并向服务器发送创建或加入消息。 这次在服务器端进行消息处理(图5-10 中报告了服务器的控制台),设想将联接消息发送到发起方(后者现在可以将通道标记为就绪),紧接着是对 Joiner 的联接响应 :
} else if (numClients == 1) {
// Second client joining...
io.sockets.in(room).emit('join', room);
socket.join(room);
socket.emit('joined', room);
} else {
// max two clients
以下摘录显示了与接收加入消息关联的客户端操作:
// Handle 'join' message coming back from server:
// another peer is joining the channel
socket.on('join', function (room){
console.log('Another peer made a request to join room ' + room);
console.log('This peer is the initiator of room ' + room + '!');
isChannelReady = true;
});
最后,以下 JavaScript 说明了客户端如何意识到自己在扮演 Joiner 的角色,因为它返回了对 create 或 join 请求的连接响应:
图5-9 Joiner 加入频道
// Handle 'joined' message coming back from server:
// this is the second peer joining the channel
socket.on('joined', function (room) {
console.log('This peer has joined room ' + room);
isChannelReady = true;
});
图5-10 信令服务器管理 Joiner 的请求
从这一点开始, Joiner 在协商的此阶段执行的其余操作与我们在上一节中查看 Initiator 的角色时所描述的操作完全相同:
- 访问本地媒体(等待用户的访问) 同意)
- 将本地视频附加到 HTML 页面
- 通过信令服务器将获取的用户媒体消息发送给远程对等体
当前内容版权归 Salvatore Loreto & Simon Pietro Romano 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 Salvatore Loreto & Simon Pietro Romano .