我正在尝试使用 React Native 构建一个聊天应用程序,并且我正在尝试使用 Azure Web Pub Sub 来实现此目的。 我正在关注docs所以我添加了@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在这些目录中找不到依赖项:node_modules@azure\web-pubsub\node_modules
这是控制台中的完整错误:
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 服务通信?如果是这样,怎么会这样?
最佳答案
So I'm asking is not possible to use Azure Web PubSub service with React Native, or should I just use the ws package to communicate with the PubSub service? And if so how so?
根据vicancy :
由于 React Native 应用程序是纯 WebSocket 客户端,因此不需要使用
@azure/web-pubsub
包,只需使用ws
包与服务进行通信。在客户端存储连接字符串并不安全。
WebSocket 客户端获取 URL 以连接到 Azure Web PubSub 的常用方法类似于示例步骤 2 中提到的工作流程: Add/Negotiate an API to the server to generate the token
更新的答案:
根据abdou-tech :
- 不需要
@azure/web-pubsub
,该包适用于想要连接到 Azure PubSub 服务的 Node 客户端。
注意:ws
包也无法在 React Native 或它需要 Node 运行时的浏览器中工作。您可以使用 native WebSocket
连接到服务的对象
关于node.js - 如何在 React Native 中使用 Azure PubSub?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73055397/