开始在 Node.js 中使用中继混合连接 WebSocket

在本快速入门中,请创建 Node.js 发送者和接收者应用程序,以便在 Azure 中继中通过混合连接 WebSocket 发送和接收消息。 若要了解 Azure 中继的常规信息,请参阅 Azure 中继

在本快速入门中,你将执行以下步骤:

  1. 使用 Azure 门户创建中继命名空间。
  2. 使用 Azure 门户在该命名空间中创建混合连接。
  3. 编写服务器(侦听器)控制台应用程序,用于接收消息。
  4. 编写客户端(发送方)控制台应用程序,用于发送消息。
  5. 运行应用程序。

先决条件

1.创建命名空间

  1. 登录到 Azure 门户
  2. 在门户的左侧导航窗格中,依次单击“+”新建,搜索“relay"。
  3. 在“创建命名空间”下输入命名空间名称。 系统会立即检查该名称是否可用。
  4. 在“订阅”框中,选择要在其中创建命名空间的 Azure 订阅。
  5. “资源组”框中,选择要在其中放置命名空间的现有资源组,或者创建新资源组。
  6. 在“位置”中,选择应托管命名空间的国家或地区。

    创建命名空间

  7. 选择“创建” 。 系统会创建并启用命名空间。 几分钟后,系统为用户的帐户预配资源。

获取管理凭据

  1. 选择“所有资源”,然后选择新创建的命名空间名称。
  2. 在“中继命名空间”下,选择“共享访问策略”。
  3. 在“共享访问策略”下,选择“RootManageSharedAccessKey”。

    connection-info

  4. 在“策略: RootManageSharedAccessKey”下选择“连接字符串 - 主密钥”旁边的“复制”按钮。 这样会将连接字符串复制到剪贴板,供以后使用。 将此值粘贴到记事本或其他某个临时位置。

    连接字符串

  5. 重复上述步骤,将主密钥的值复制和粘贴到临时位置,供以后使用。

2.创建混合连接

确保已创建中继命名空间

  1. 登录到 Azure 门户
  2. 在左侧菜单中,选择“所有资源”。
  3. 选择要在其中创建混合连接的命名空间。 在本示例中,该命名空间为 mynewns
  4. 在“中继命名空间”下选择“混合连接”。

    创建混合连接

  5. 在命名空间概览窗口中,选择“+ 混合连接”

    选择混合连接

  6. 在“创建混合连接”下输入一个值,作为混合连接名称。 保留其他默认值。

    选择“新建”

  7. 选择“创建” 。

3.创建服务器应用程序(侦听程序)

若要侦听和接收来自中继的消息,请编写 Node.js 控制台应用程序。

创建 Node.js 应用程序

  • 创建一个名为 listener.js 的新 JavaScript 文件。

添加中继 NPM 包

  • 从项目文件夹中的 Node 命令提示符运行 npm install hyco-ws

编写一些代码来接收消息

  1. listener.js 文件的顶部,添加以下constant

    const WebSocket = require('hyco-ws');
    
  2. 将以下常量添加到 listener.js 文件,用于保存混合连接详细信息。 将括号中的占位符替换为在创建混合连接时获得的值。

    1. const ns - 中继命名空间。 请务必使用完全限定的命名空间名称,例如 {namespace}.servicebus.chinacloudapi.cn
    2. const path - 混合连接的名称。
    3. const keyrule - SAS 密钥的名称。
    4. const key - SAS 密钥值。
  3. 将以下代码添加到 listener.js 文件:

    var wss = WebSocket.createRelayedServer(
    {
        server : WebSocket.createRelayListenUri(ns, path),
        token: WebSocket.createRelayToken('http://' + ns, keyrule, key)
    }, 
    function (ws) {
        console.log('connection accepted');
        ws.onmessage = function (event) {
            console.log(event.data);
        };
        ws.on('close', function () {
            console.log('connection closed');
        });       
    });
    
    console.log('listening');
    
    wss.on('error', function(err) {
        console.log('error' + err);
    });
    

    listener.js 文件的内容应如下所示:

    const WebSocket = require('hyco-ws');
    
    const ns = "{RelayNamespace}";
    const path = "{HybridConnectionName}";
    const keyrule = "{SASKeyName}";
    const key = "{SASKeyValue}";
    
    var wss = WebSocket.createRelayedServer(
        {
            server : WebSocket.createRelayListenUri(ns, path),
            token: WebSocket.createRelayToken('http://' + ns, keyrule, key)
        }, 
        function (ws) {
            console.log('connection accepted');
            ws.onmessage = function (event) {
                console.log(event.data);
            };
            ws.on('close', function () {
                console.log('connection closed');
            });       
    });
    
    console.log('listening');
    
    wss.on('error', function(err) {
        console.log('error' + err);
    });
    

4.创建客户端应用程序(发送程序)

若要将消息发送到中继,请编写 Node.js 控制台应用程序。

创建 Node.js 应用程序

创建一个名为 sender.js 的新 JavaScript 文件。

添加中继 NPM 包

从项目文件夹中的 Node 命令提示符运行 npm install hyco-ws

编写一些代码来发送消息

  1. sender.js 文件的顶部,添加以下constants

    const WebSocket = require('hyco-ws');
    const readline = require('readline')
        .createInterface({
            input: process.stdin,
            output: process.stdout
        });;
    
  2. 将以下常量添加到 sender.js 文件,用于保存混合连接详细信息。 将括号中的占位符替换为在创建混合连接时获得的值。

    1. const ns - 中继命名空间。 请务必使用完全限定的命名空间名称,例如 {namespace}.servicebus.chinacloudapi.cn
    2. const path - 混合连接的名称。
    3. const keyrule - SAS 密钥的名称。
    4. const key - SAS 密钥值。
  3. 将以下代码添加到 sender.js 文件:

    WebSocket.relayedConnect(
        WebSocket.createRelaySendUri(ns, path),
        WebSocket.createRelayToken('http://'+ns, keyrule, key),
        function (wss) {
            readline.on('line', (input) => {
                wss.send(input, null);
            });
    
            console.log('Started client interval.');
            wss.on('close', function () {
                console.log('stopping client interval');
                process.exit();
            });
        }
    );
    

    sender.js 文件的内容应如下所示:

    const WebSocket = require('hyco-ws');
    const readline = require('readline')
        .createInterface({
            input: process.stdin,
            output: process.stdout
        });;
    
    const ns = "{RelayNamespace}";
    const path = "{HybridConnectionName}";
    const keyrule = "{SASKeyName}";
    const key = "{SASKeyValue}";
    
    WebSocket.relayedConnect(
        WebSocket.createRelaySendUri(ns, path),
        WebSocket.createRelayToken('http://'+ns, keyrule, key),
        function (wss) {
            readline.on('line', (input) => {
                wss.send(input, null);
            });
    
            console.log('Started client interval.');
            wss.on('close', function () {
                console.log('stopping client interval');
                process.exit();
            });
        }
    );
    

5.运行应用程序

  1. 运行服务器应用程序:在 Node.js 命令提示符处,键入 node listener.js
  2. 运行客户端应用程序:在 Node.js 命令提示符处键入 node sender.js,然后输入某些文本。
  3. 确保服务器应用程序控制台输出了客户端应用程序中输入的文本。

running-applications

恭喜,现已使用 Node.js 创建端到端混合连接应用程序!

后续步骤

在本快速入门中,你创建了 Node.js 客户端和服务器应用程序,此类程序使用 WebSocket 来发送和接收消息。 Azure 中继的混合连接功能也支持使用 HTTP 发送和接收消息。 若要了解如何将 HTTP 与 Azure 中继混合连接配合使用,请参阅 Node.js HTTP 快速入门

在本快速入门中,你使用了 Node.js 来创建客户端和服务器应用程序。 若要了解如何使用 .NET Framework 编写客户端和服务器应用程序,请参阅 .NET WebSocket 快速入门.NET HTTP 快速入门