问题标签 [mercure]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
393 浏览

graphql - api-platform:用于 GraphQL 查询的自动 Mercure 订阅

api-platform 在更新标记为的资源时自动向 Mercure 中心发出事件,mercure=true并发布主题以在相应的GET端点中侦听。好的。是否已经有一个选项可以在生成的 GraphQL 端点中使用?

美居文档说:https://github.com/dunglas/mercure#how-to-use-mercure-with-graphql美居应该“很好地”与任何 GraphQL API 集成,只要它“返回相应的主题 URL ”。但是 afaik 由 api-platform 生成的 GraphQL API 没有(https://api-platform.com/docs/core/mercure/)。我错过了什么还是即将到来?在前端使用 apollo-vue。

为了解决这个问题,我可以使用EventSource前端的专用主题来收听所有实体 ID 的变化。我会使用http://localhost:8080/product_streams/{id}那里的 URI 模板。但我无法编写一个仅匹配某些 id 的 uri 模板,例如:http://localhost:8080/product_streams/{id:123,456,789}获取流 123 456 789 的更新(尝试https://uri-template-tester.mercure.rocks/ && https://www .rfc-editor.org/rfc/rfc6570#page-18)没有成功:(

0 投票
1 回答
3604 浏览

symfony - 如何在生产环境中运行 Mercure

我正在尝试在生产环境中在 Symfony 上运行 Mercure。

[第一个问题]

看来我需要保持我的 ssh 连接处于活动状态以保持 Mercure 运行。
另外,我希望能够运行多个 Mercure 实例(每个虚拟主机一个)

[第二个问题]

由于我的虚拟主机已经在使用 HTTPS,我使用以下命令运行 Mercure:

如果我对我的网络用户 (www-data) 尝试此命令,我会收到以下错误:

错误 [0000] 侦听 tcp:443:绑定:权限被拒绝

如果我尝试使用 root 运行它,则会收到此错误:

错误 [0000] 侦听 tcp:443:绑定:地址已在使用中

网络上到处都有一些消息建议使用代理,但没有提供任何示例。


有人可以提供一个解决方案,首先,运行 Mercure 而不必在 ssh 上保持我的用户连接,并且如果可能的话,能够为每个项目(vhost)运行一个 mercure 实例(mercure 是我项目的根目录)

其次,提供一个完整的示例以及如何解决端口问题或如何使用代理的问题。

0 投票
1 回答
1136 浏览

php - 如何让 Mercure 服务器自动推送给事件订阅者?

我有一个快速测试 Symfony 应用程序正在运行以尝试集成 Mercure 协议。

我有一个测试 Mercure 集线器,运行以下内容:

我有一个将数据提交到以下端点的表单:

一旦我点击表单,我会在调试器中得到以下信息:

但是,正在侦听的第二个浏览器上的 javascript 不会将响应放入控制台日志中:

如果我回到终端并运行ctrl+c(以终止 Mercure 服务器),则数据将被推送到 javascript 中。我的问题是如何让它自动将数据推送到 javascript 而无需终止 Mercure 服务器(在 localhost:3000 上运行)然后重新启动它?

0 投票
2 回答
830 浏览

symfony - 这是否可以使用 API 平台与 Heroku 获得 Mercure 协议?

我使用 Heroku 部署了 API Platform api 和客户端,但 Mercure 似乎无法开箱即用,但我认为我的应用程序可能缺少配置。

我唯一配置的是这个 MERCURE_SUBSCRIBE_URL= http://my-random-herokuapp-name-generated.herokuapp.com/hub

在生产中,我的集线器地址出现 404 错误,在本地我得到一个答案,说我没有提供主题(这是有道理的,因为我只是请求地址进行测试而没有提供任何参数)。

在本地环境中,完整的包 API 平台是由运行 Mercure 服务器的 docker 提供的,我认为这可能是 herokuapp 不支持 Mercure 的答案,但对我来说不是很清楚。

所以基本上我在集线器地址上收到 404 not found 错误,而不是 200

0 投票
0 回答
451 浏览

javascript - Symfony 4 和 MercureBundle

我是这个平台的新用户,我正在尝试按照文档将 Mercure 集成到 Symfony:https ://symfony.com/blog/symfony-gets-real-time-push-capabilities 。一旦控制台中的所有步骤都遵循 chrome 对 Publisher 类的响应,就会生成错误:

净 :: ERR_ABORTED 406。

你能帮我理解如何使这个捆绑包工作吗?

.env 变量设置如下: 'MERCURE_PUBLISH_URL' => ' http://www.davidecpr.online:3000/hub '

0 投票
1 回答
2692 浏览

symfony - Symfony 4 和 Mercure 与 Docker - 无法连接到服务器

我正在尝试使用 Docker 映像在 Symfony 上运行 Mercure。

symfony/mercure 版本:“v0.2.0”,

docker-compose.yaml 配置:

当我访问http://my_project.com:9090/时,可以看到可行的 Mercure 调试工具页面。Mercure 已正确安装并使用 docker 容器运行。

Symfony .env 文件:

MERCURE_JWT_SECRET 是使用来自 Docker 配置 (MySecret) 的 JWT_KEY 生成的有效 JWT 令牌,带有有效负载:

当我尝试这样的简单示例时:

我收到错误消息“无法连接到服务器” http://my_project.com/hub

尝试在 MERCURE_PUBLISH_URL 上添加端口 9090 或 80,但出现相同的错误。每次更改 .env 文件时,我都会重新启动 Docker。

如何使用 Docker 配置正确设置 Mercure 集线器的 URL?

编辑:

我在 Docker 之外的 JS 代码:

在 Docker 中设置 - CORS_ALLOWED_ORIGINS=* 后我对 CORS 没有问题。我不在 JS 中使用 JWT 进行身份验证。

0 投票
2 回答
2235 浏览

apache - 如何使用 Apache 在生产环境中运行 Mercure

我在使用 Mercure 的 Apache 服务器上有一个 Symfony 项目,我尝试在生产环境中设置 Mercure 集线器。

为了在生产环境中运行 Mercure 集线器,我将存档 mercure_0.6.2_Linux_x86_64.tar.gz ( https://github.com/dunglas/mercure/releases ) 提取到项目根目录下的子文件夹 mercure 中。

然后我运行命令:

用我的信息

但是集线器没有运行并出现此错误:

FATA [0000] 侦听 tcp :443: 绑定: 权限被拒绝

我看到了一个类似的问题(如何在生产中运行 Mercure),但建议的答案使用 ADDR 来更改端口,并且根据文档,“Let's Encrypt 仅支持默认端口:要使用 Let's Encrypt,请不要设置此变量。” .

如何在生产环境中运行 Mercure?

0 投票
1 回答
1205 浏览

mercure - Mercure + Angular + Symfony >>> 全部在本地机器上

我在 Mac OS 10.14.6 上使用 Angular 8、Symfony 4.3 和 mercure 0.72 darwin。我对symfony很陌生。我只想将更新发送给本地机器上的授权客户端。到目前为止,这确实是一个很大的痛苦。我希望我能在这里找到一些帮助或答案。

我得到的最后一个错误是

http: TLS handshake error from ip:55289: acme/autocert: unable to authorize "mydyndns-url.com"; challenge "http-01" failed with error: acme: authorization error for mydyndns-url.com: 400 urn:acme:error:connection: Fetching http://mydyndns-url.com/.well-known/acme-challenge/SomeHash: Error getting validation data; challenge "tls-alpn-01" failed with error: acme: authorization error for mydyndns-url.com: 400 urn:acme:error:connection: Connection refused

我没有可以测试任何东西的远程服务器。但我想向授权客户发送一些更新。我没有办法在本地测试吗?没有任何 sll tls 的东西?到目前为止,如果我理解正确,要在客户端(cookie 或承载)中使用授权,我必须加密mercure 通信,为此我需要一个证书,该证书是我用letsencrypt 为我的dyndns url 创建的,我也是为此创建的,但是然后我还读到加密授权必须在 443 上运行,但都在一台机器上,所以我现在需要为所有本地测试服务器创建子域吗?(因为我的 dyndns 在使用证书创建时存在问题sudo certbot certonly --standalone,它给我的子域挑战失败,然后是 dyndns 提供者的子子域),那么他为什么还要尝试获取 :80 服务器以使用 .well-known 路径进行授权?

但是因为我觉得自己像掉进了爱丽丝兔洞并且没有尽头,所以我不知道用美居尝试任何东西是否还有意义。

我只想在“/messages”上推送一条消息以定位“/user/patata”,然后在我的角度客户端中使用 cookie 获取该消息。在本地开发服务器上做到这一点有那么难吗?该用例是否有完整的文档?

使用它来启动美居

当然还有 symfony 设置和代码以及角码等等。但把所有东西都放在这里就太过分了。大多数情况下,我想知道如何简化这一点,而不是让你头晕目眩:D

0 投票
2 回答
965 浏览

javascript - 反应原生无法订阅美居后端通知

我正在使用 React Native 和 Symfony 开发通知系统。我用 docker 配置 Mercure 来处理实时更新的前端订阅:.env 文件:

美居.yaml:

我在我的 React Native 应用程序中创建了一个通知组件,并使用了 symfony mercure 官方文档中的代码: https ://symfony.com/doc/4.3/mercure.html#subscribing Notifications.js 代码:

我用 Postan 进行了测试,得到了有效的响应: 邮递员测试美居

我尝试了 html 文件中的 javaScript 代码进行测试:

当我使用 Postman 运行请求时,我得到了实时响应: 控制台登录html文件 我的问题是 URL、searchParams 和 eventSource 与本机反应不兼容。如何转换此 JavaScript 代码以响应本机有效代码?我尝试安装一些库:whatwg-url、buffer、react-native-event-source,我当前的代码是:

我得到了这个错误:未定义不是一个对象(评估'url.global.URLSearchParams')

0 投票
0 回答
495 浏览

php - 为什么 Symfony 的自动装配会给我一个类的调试版本实例?我可以绕过这个以在开发模式下获得常规版本吗?

Symfony\Component\Mercure\Publisher 的自动装配有问题。相反,我被错误地自动连接 Symfony\Component\Mercure\Debug\TraceablePublisher。我该如何解决?

错误消息是: 传递给 App\Controller\PublisherController::index() 的参数 1 必须是 Symfony\Component\Mercure\Publisher 的实例,给出 Symfony\Component\Mercure\Debug\TraceablePublisher 的实例,在 C:\xampp 中调用\htdocs\freely\vendor\symfony\http-kernel\HttpKernel.php 在第 145 行