NodeJS 如何在React Native中使用Azure发布订阅?

nc1teljy  于 2023-02-15  发布在  Node.js
关注(0)|答案(1)|浏览(108)

我正在尝试使用React Native构建聊天应用程序,并尝试使用Azure Web Pub Sub来实现这一点。我正在遵循文档,因此我将@azure/web-pubsub依赖项添加到我的项目中,并复制了我在文档中找到的这段代码:

// other react native imports...

const WebSocket = require('ws');
const { WebPubSubServiceClient } = require('@azure/web-pubsub');

async function main() {
  const hub = "pubsub";
  let service = new WebPubSubServiceClient(process.env.WebPubSubConnectionString, hub);
  let token = await service.getClientAccessToken();
  let ws = new WebSocket(token.url);
  ws.on('open', () => console.log('connected'));
  ws.on('message', data => console.log('Message received: %s', data));
}

我在Android上运行应用程序,我得到这个错误,告诉我在这些目录中找不到url依赖项:节点模块@azure\网络发布子\节点模块
下面是来自控制台的完整错误:

error: Error: Unable to resolve module url from C:\Users\abdou\source\Mobile Apps\Test app\AwesomeTSProject\node_modules\@azure\web-pubsub\dist\index.js: url could not be found within the project or in these directories:
  node_modules\@azure\web-pubsub\node_modules
  node_modules
  ..\..\..\..\node_modules
  11 | var jwt = _interopDefault(require('jsonwebtoken'));
  12 | var logger$1 = require('@azure/logger');
> 13 | var url = require('url');
     |                    ^
  14 |
  15 | /*
  16 |  * Copyright (c) Microsoft Corporation.
    at ModuleResolver.resolveDependency (C:\Users\abdou\source\Mobile Apps\Test app\AwesomeTSProject\node_modules\metro\src\node-haste\DependencyGraph\ModuleResolution.js:158:15)
    at DependencyGraph.resolveDependency (C:\Users\abdou\source\Mobile Apps\Test app\AwesomeTSProject\node_modules\metro\src\node-haste\DependencyGraph.js:231:43)
    at Object.resolve (C:\Users\abdou\source\Mobile Apps\Test app\AwesomeTSProject\node_modules\metro\src\lib\transformHelpers.js:129:24)
    at resolve (C:\Users\abdou\source\Mobile Apps\Test app\AwesomeTSProject\node_modules\metro\src\DeltaBundler\traverseDependencies.js:396:33)
    at C:\Users\abdou\source\Mobile Apps\Test app\AwesomeTSProject\node_modules\metro\src\DeltaBundler\traverseDependencies.js:412:26
    at Array.reduce (<anonymous>)
    at resolveDependencies (C:\Users\abdou\source\Mobile Apps\Test app\AwesomeTSProject\node_modules\metro\src\DeltaBundler\traverseDependencies.js:411:33)
    at processModule (C:\Users\abdou\source\Mobile Apps\Test app\AwesomeTSProject\node_modules\metro\src\DeltaBundler\traverseDependencies.js:140:31)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async addDependency (C:\Users\abdou\source\Mobile Apps\Test app\AwesomeTSProject\node_modules\metro\src\DeltaBundler\traverseDependencies.js:230:18)
因此,我想问的是,是否不能将Azure Web PubSub服务与React Native一起使用?或者我是否应该仅使用ws包与PubSub服务通信?如果可以,应该如何操作?
cclgggtu

cclgggtu1#

所以我问是不可能使用Azure Web PubSub服务与React Native,还是我应该只使用ws包与PubSub服务通信?如果是这样,怎么做?
根据vicancy

  • 由于React Native应用程序是纯WebSocket客户端,因此不需要使用@azure/web-pubsub包,只需使用ws包与服务通信。
  • 在客户端存储连接字符串是不安全的。
  • WebSocket客户端获取URL以连接到Azure Web PubSub的常见方法与示例步骤2中提到的工作流类似:向服务器添加/协商API以生成令牌
    • 更新答案:**

根据abdou-tech

  • 不需要@azure/web-pubsub,该软件包适用于希望连接到Azure PubSub服务的节点客户端。
    • 注意:**ws包也不能在React Native或浏览器中运行,它需要节点运行时。可以使用本机WebSocket对象连接到服务

相关问题