问题标签 [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 回答
384 浏览

symfony - Mercure & Event Source Polyfill:错误:45000 毫秒内没有活动。收到 2 个字符。重新连接

我有一个 symfony / api 平台服务器。我添加了 Mercure 以将 SSE 发送到 API 客户端。在我的客户端,我使用事件源 Polyfill 进行订阅。

我设法接收消息,但出现以下错误:

错误:45000 毫秒内没有活动。收到 2 个字符。重新连接。

我读到需要心跳来保持连接并避免此错误。

然后我将心跳指令添加到集线器命令行:

但没有任何改变。我仍然有这个错误。

我错过了什么?

谢谢您的帮助

0 投票
1 回答
303 浏览

php - 使用 Symfony 命令类启动 Mercure Hub 服务器 - 问题 [Symfony]

这个想法是:而不是像这样直接在我们的命令行 中启动Mercure Hub 服务器:在此处输入图像描述

我们想通过使用symfony 命令使它更容易,因此我们可以像这样启动服务器: 在此处输入图像描述

注意:我们已经下载了与使 Mercure Hub 服务器工作的文件相对应的存档,我们在其中找到了可执行的mercure.exe并将其解压缩到 symfony 项目根目录中的“mercure 文件夹”中。

这是命令类在此处输入图像描述

它输出一个错误: 在此处输入图像描述

即使我们像可执行文件一样运行它: 在此处输入图像描述

它还输出错误: 在此处输入图像描述

那么我们如何解决这个问题并使其在 php 中工作。似乎它不能与绝对路径一起使用。

第二期:

假设我们成功通过了第一个问题,并且有一个替代方案(这对我来说不是首选,所以最好解决第一个问题),方法是添加一个必需的参数来指示 mercure.exe 所在的文件夹,如下所示: 在此处输入图像描述

所以我们修改我们的命令类: 在此处输入图像描述

输出显示以下错误: 在此处输入图像描述

JWT_KEY 无法识别,而当我们在命令行中键入完整命令时它可以正常工作。

那么,这两个问题的原因是什么以及如何解决它们?

0 投票
2 回答
302 浏览

docker - 为什么使用 PublisherInterface 向 Mercure Hub 推送更新会引发 TransferException?

我在我的 Windows 机器上的 Docker 容器中使用 Mercure Hub。我有一个 Symfony 应用程序,我想使用 Mercure 包将消息推送到客户端。

当我在客户端 javascript 中获取此端点时(即发布要由集线器推送的消息),我从HTTPClient内部得到了这个异常PublisherInterface

运输异常

fopen():SSL 操作失败,代码为 1。OpenSSL 错误消息:错误:1416F086:SSL 例程:tls_process_server_certificate:certificate verify failed

当我使用 Mercure 调试工具发布消息时,一切正常,但正如我们所见,我的 Symfony 应用程序却不行。我想知道为什么?:)

0 投票
1 回答
397 浏览

php - 使用 Symfony 和 Apache 在生产环境中运行 Mercure | HTTPS 问题

我有一个 symfony 应用程序,我正在使用 Mercure。

要运行 Mercure,我使用此命令

我已经安装了 Let's encrypt 颁发的 SSL 证书。我的阿帕奇:

问题。当我尝试订阅某个主题时,会收到此错误

如果我尝试从浏览器获取此 URL,我会遇到同样的问题,但如果我尝试使用 http://,一切都会好起来的,但不幸的是,我无法从我的 https 域请求 http。

如果有人可以帮助我,我会很高兴 =)

0 投票
1 回答
1455 浏览

php - Symfony + Mercure 连接问题。使用 HTTPS 而不是 HTTP

我试图在两个 docker 容器之间建立连接。一个是 nginx 服务器 + Symfony 应用程序,第二个是 Mercure。

我的应用程序运行良好,docker-compose build 也可以正常运行。问题是当我尝试测试它并尝试从 Symfony 应用程序向 Mercure 发布内容时,我收到 500 内部服务器错误,并显示“无法发送更新”。信息。

在堆栈跟踪中,我可以看到我得到了 TransportException 错误,其 env 变量与我在.env文件中的不同。应用程序正在尝试使用 HTTPS 而不是 .env 文件中定义的 HTTP。

Symfony\Component\HttpClient\Exception\TransportException:“https://mercure/.well-known/mercure”的 SSL 连接错误。在供应商/symfony/http-client/Chunk/ErrorChunk.php:65

在美居容器中,我得到:

我的 docker-compose 配置

这是我的控制器,当我发布到美居主题时:

0 投票
0 回答
671 浏览

symfony - Nginx 反向代理背后的 Mercure 集线器

我尝试在服务器上部署 Mercure 集线器。

已经有一个 Symfony 应用程序(REST API)服务于 Apache2(以及在反向代理中配置的 Nginx)。我的想法是将 API 代理保留为 Apache2,并将 Mercure 订阅配置为转发到 Mercure Hub(Caddy 服务器)。

API 部分一切正常,但无法正确配置 Nginx 和 Caddy 以协同工作。我准确地说,当它不在 Nginx 后面时,我成功地到达了集线器。我使用自定义证书,出于某种原因,每次尝试订阅集线器时,都会出现以下错误:

proxy_pass https://mydomain:3000;如果我使用而不是修改我的 Nginx 配置proxy_pass https://127.0.0.1:3000;,则错误变为:

Caddy 或 Nginx 日志中没有进一步的解释。

我的猜测是 Nginx 没有将正确的请求域转移到 Caddy,但我不知道为什么,因为我正确应用了我在规范中找到的配置说明。任何帮助将不胜感激,谢谢!

Caddy.dev 配置

NGinx 虚拟主机配置

启动 Mercure 中心的命令

0 投票
0 回答
33 浏览

javascript - 我看到 Mercure 显示所有事件(新订阅者、已发布更新但订阅者已断开连接)

Mercure 更新已发布,但订阅者断开连接。Mercure 再次自动重新连接,客户端 SSE 在第二次尝试中获取数据,性能最差。

我做错什么了吗?

0 投票
0 回答
180 浏览

docker - 无法连接到“http://mercure:7001/.well-known/mercure”的服务器 // TransportException

我对此有点困惑,所以我希望你在我的 docker-compose 中提供帮助,我想我已经配置了所有想要的东西。但问题是,当我尝试通过 symfony 在 Mercure 中发布某些东西时,他不想这样做,但是当我尝试不通过 symfony(使用 js)传递时,它会起作用如果有人有想法,那会很酷

在此处输入图像描述

谢谢大家

在此处输入图像描述

0 投票
1 回答
365 浏览

javascript - Symfony / Mercure / JS EventSource 不发送 cookie

我已经阻止这个问题 2 天了。我正在尝试为 Mercure 设置身份验证,以便客户可以订阅“私人”集线器。所以我按照 Symfony 和 Mercury 文档中的规定配置了我的环境变量,它们是:

我的应用 Symfony 的 .env:

我的球童文件:

我的容器美居:

这是我的控制器生成授权 cookie 和发布集线器的路由的代码:

我的路线授权:

我在集线器上发布的路线(此路线只是一个测试路线,用于了解我的客户是否订阅良好并收到通知):

和我的 javascript :

当我将路由称为“授权”时,我在响应标头中看到我确实有要发送的 cookie。当我在 JWT.IO 上对其进行解码时,我们可以看到我的 jwt 包含订阅此集线器的信息,但是当我调用我的测试路由时,如果我私下发送此集线器,客户端不会收到通知(在公共场合,一切都很顺利出色地)。所以我的印象是cookies不发送。

0 投票
1 回答
943 浏览

symfony5 - Symfony 5 Mercure 无法为“https://127.0.0.1:8000/.well-known/mercure”发送更新 SSL 连接错误

我是学生和初学者,如果我不明白,请提前道歉。我尝试将 Symfony 5 与 mercure 一起使用,但我很难将更新发送到集线器。我检查了 Symfony Mercure 文档的文档,并考虑对此做出很好的贡献,但不是全部。

我已经在我的 Windows 10 上安装了 docker,我直接通过 Symfony cli 安装 Mercure,就像在文档上写的一样。我的参数是cli安装的默认参数。.env

我使用真正的 JWT 机密只是为了示例 ([JWT.io]) 2

用我的秘密密码。

我用 eventSource 创建了一个 js 文件。

我希望在有人访问重述订单时发送通知:http: //127.0.0.1 :8000/commande/recapitulatif 。在我的控制器中,当地址http://127.0.0.1:8000/commande/recapitulatif被调用时,我添加:

在我需要通知并添加 js 代码的页面上,如果我在 chrome 的应用程序开发人员的网络中检查与 Mercure 的连接,我可以看到:

但是当我尝试访问网址http://127.0.0.1:8000/commande/recapitulatif时出现错误(无法发送更新)和(“https://127.0.0.1:8000/ 的 SSL 连接错误” .well-known/mercure”。)

更新:我改变

现在出现错误(未能发送更新)我有(HTTP/1.1 401 Unauthorized 返回“http://127.0.0.1:8000/.well-known/mercure”。)

可能我需要将我的应用程序放到 https 以便与 mercure 建立 ssl 连接?

另一个尝试。我替换 hhttp 我将 https 更改为 http 到我的 .env 和 js 文件。之后,我像这样更改控制器中的代码:

现在我没有错误,但没有通知我的浏览器。

我想要通知的页面的日志:

以及我需要发送通知的日志:

但如果我像这样添加更新:

我的日志是这样的:

如果有人可以帮助我了解我的问题出在哪里,非常感谢。