开始服务器中介的对话

现在,我们进入了 图4-11 中报告的呼叫流程阶段,该阶段基本上捕获了应用程序的核心。 实际上,在此阶段中,发起方将第一条消息发送到连接器,该连接器首先被通知此事件,然后提示您引入适当的 answer

图4-11

图4-11 开始会话

像往常一样,客户端会检索用户的输入,并向服务器发出一条消息,以便正确分派它。 在服务器端,接收到的消息只是在频道上 广播(请注意,在仅由两个对等方组成的通道上进行广播等效于向消息本身发送者以外的对等方发送通知):

  1. // Handle 'message' messages
  2. socket.on('message', function (message) {
  3. log('S --> Got message: ', message);
  4. socket.broadcast.to(message.channel).emit('message', message.message);
  5. });

图4-12 的控制台快照中说明了上述服务器的行为。

图4-12

图4-12 信令服务器充当中继节点

图4-13 显示了刚刚接收到服务器中继的消息的远程对等方(连接程序)。

图4-13

图4-13 远程对等方从信令服务器接收中继消息

如图所示,将执行以下操作:

  1. 在 JavaScript 控制台和 HTML5 页面上记录接收到的消息
  2. 提示接收器正确输入
  3. 将接收方的答案发送回发送方(通过信令信道)

这样的序列由以下代码片段驱动:

  1. // Handle 'message' message
  2. socket.on('message', function (message) {
  3. console.log('Got message from other peer: ' + message);
  4. div.insertAdjacentHTML( 'beforeEnd', '<p>Time: ' + (performance.now() / 1000).toFixed(3) + ' --> Got message from other peer: </p>');
  5. div.insertAdjacentHTML( 'beforeEnd', '<p style="color:blue">' + message + '</p>');
  6. // Send back response message:
  7. // 1. Get response from user
  8. var myResponse = prompt('Send response to other peer:', "");
  9. // 2. Send it to remote peer (through server)
  10. socket.emit('response', {
  11. channel: channel,
  12. message: myResponse
  13. });
  14. });

接收器在 图4-14 的提示窗口中单击 OK 按钮后,响应消息就会向服务器发出,服务器将其转发到远程方:

  1. // Handle 'response' messages
  2. socket.on('response', function (response) {
  3. log('S --> Got response: ', response);
  4. // Just forward message to the other peer
  5. socket.broadcast.to(response.channel).emit('response', response.message);
  6. });

服务器的控制台快照在 图4-14 中再次说明了此行为。

图4-14

图4-14 信令服务器中继远程对等方的响应