开始在 Node 中使用中继混合连接 Websocket

本教程简单介绍了 Azure 中继混合连接 Websocket 功能,同时介绍了如何使用 Node.js 创建客户端应用程序,以便将 Websocket 消息发送到相应的侦听器应用程序。

要完成的任务

由于混合连接要求客户端和服务器组件,请在本教程中创建两个控制台应用程序。 下面是相关步骤:

  1. 使用 Azure 门户创建中继命名空间。
  2. 使用 Azure 门户创建混合连接。
  3. 编写服务器控制台应用程序用于接收消息。
  4. 编写客户端控制台应用程序用于发送消息。

先决条件

  1. Node.js
  2. Azure 订阅。

Note

若要完成本教程,你需要一个 Azure 帐户。 你可以注册试用版

1.使用 Azure 门户创建命名空间

如果已创建中继命名空间,请跳转到使用 Azure 门户创建混合连接部分。

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

    创建命名空间

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

获取管理凭据

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

    connection-info

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

    连接字符串

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

2.使用 Azure 门户创建混合连接

如果已创建混合连接,请跳转到创建服务器应用程序部分。

确保已创建中继命名空间

  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 创建端到端混合连接应用程序!

后续步骤