Joiner 加入频道

现在,让我们找出第二个同伴加入该频道时发生的情况。 相关的动作顺序如 图5-9 所示。

该图的第一部分反映了发起方的行为,提示用户输入频道名称,并向服务器发送创建或加入消息。 这次在服务器端进行消息处理(图5-10 中报告了服务器的控制台),设想将联接消息发送到发起方(后者现在可以将通道标记为就绪),紧接着是对 Joiner 的联接响应 :

  1. } else if (numClients == 1) {
  2. // Second client joining...
  3. io.sockets.in(room).emit('join', room);
  4. socket.join(room);
  5. socket.emit('joined', room);
  6. } else {
  7. // max two clients

以下摘录显示了与接收加入消息关联的客户端操作:

  1. // Handle 'join' message coming back from server:
  2. // another peer is joining the channel
  3. socket.on('join', function (room){
  4. console.log('Another peer made a request to join room ' + room);
  5. console.log('This peer is the initiator of room ' + room + '!');
  6. isChannelReady = true;
  7. });

最后,以下 JavaScript 说明了客户端如何意识到自己在扮演 Joiner 的角色,因为它返回了对 create 或 join 请求的连接响应:

图5-9

图5-9 Joiner 加入频道

  1. // Handle 'joined' message coming back from server:
  2. // this is the second peer joining the channel
  3. socket.on('joined', function (room) {
  4. console.log('This peer has joined room ' + room);
  5. isChannelReady = true;
  6. });

图5-10

图5-10 信令服务器管理 Joiner 的请求

从这一点开始, Joiner 在协商的此阶段执行的其余操作与我们在上一节中查看 Initiator 的角色时所描述的操作完全相同:

  1. 访问本地媒体(等待用户的访问) 同意)
  2. 将本地视频附加到 HTML 页面
  3. 通过信令服务器将获取的用户媒体消息发送给远程对等体