问题标签 [eventsource]
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.
javascript - 订阅发布/订阅事件时获取以前的事件
我正在构建一个 Web 应用程序,用户可以在其中排队处理作业。后端日志可能包含:
前端代码如下所示:
因为 EventSource 订阅不是即时的,所以从服务器发回的第一条消息可能是“第 2 部分,共 12 部分已完成”,错过了第 1 部分的更新。有没有办法确保没有错过任何事件,简短还提供一种方法来获取给定工作的所有事件?
scala - 使用 Play 2.5 和服务器发送事件的命名事件流
服务器发送事件中的默认事件名称/类型是“消息”。我正在尝试更改事件名称,但它不起作用。我正在使用 Play 2.5 和 akka 流。
但它不会更改事件名称/类型。它仍在收听消息事件而不是test1。请建议。任何帮助表示赞赏。
angular - 多次接收同一事件的消息 服务器发送事件
我正在开发一个 Web 应用程序来使用 openHab API 和使用 SSE 来控制一些灯光,但是当灯光亮起时,我同时收到 3 条消息
一个值为 100,另外两个相同的消息为灯光的实际值(例如 45) 该值对应于灯光亮度的百分比
问题是我的进度条显示灯的位置到 100% 然后下降到它应该的值,我想避免有什么东西可以阻止消息或仅更新最后一条消息的值已收到 ?
谢谢。
webpack - webpack 和 vuejs 的事件源问题
我正在使用 express 和 vuejs 制作自己的博客。在 login.vue 中,我发现在 Chrome 中按下“提交按钮”后,网站重定向到 localhost:8080/?#/login。(它在 Firefox 中完美运行)所以我必须登录“两次”才能登录。
在发布“请求”之后,在 (response) => { ... } 之前发生以下错误
但有趣的是重定向到 /?#/login 后,它成功了。我只想知道为什么会发生这个错误。我想这可能是 Webpack 错误,但我不知道如何修复它。
javascript - Safari 服务器发送事件 (SSE) 无限循环
我在 Safari 9 和 Safari 10 中遇到服务器发送事件 (SSE) 问题。SSE 连接打开,立即关闭,然后在无限循环中重新连接。
这是客户端代码:
这些是 http 响应标头:
一些附加说明:
- 我在 Chrome 和 Firefox 中测试过,无法重复
- 我在没有 https的情况下在 Safari 中测试并且无法重复
- 我在 Safari中使用 https进行了测试,并且可以重复
- https 证书是使用 Lets Encrypt 自动生成的
- 后端服务器是用 Go 编写的,默认使用 http/2
我只能在 Safari 中使用 https 重复这一事实很有趣。因此,我想知道 SSE 和 https 是否存在任何已知问题,或者我可能在此处配置错误或遗漏了其他任何问题。
编辑
我已经隔离了问题并发现了与协议的相关性。启用 http2 协议后,我能够重现此问题。在服务器上禁用 http2 时,我不再能够重现此问题。
我使用以下服务器补丁进行验证:
google-chrome - 事件源修改协议
我在公司环境中工作,发现了一个我无法解决的问题。
它与EventSource
将 URL 参数从更改HTTP
为HTTPS
.
这导致浏览器抛出此错误:
GET https://localhost:8080 net::ERR_TUNNEL_CONNECTION_FAILED
我正在使用的网站上进行开发,HTTPS
所以也许这是设计使然,它使用相同的协议。有人遇到过这个问题或知道如何解决吗?
- - 更新 - -
看起来这是设计使然。在另一个 HTTPS 站点上尝试此操作时,我得到了以下信息:
Mixed Content: The page at 'https://...' was loaded over HTTPS, but requested an insecure EventSource endpoint 'http://localhost...'. This request has been blocked; the content must be served over HTTPS.
问题仍然存在,我该如何解决这个问题?
javascript - 事件源“事件”参数未在服务器上所需的 PHP 文件中设置
我不确定如何最好地解释这个问题。
我有一个带有一些自定义事件处理程序的 Javascript EventSource 对象,例如:
在updates.php 中,我可以使用更新流的“event:”参数定义自定义事件,如下所示,以触发适当的处理程序。
这在updates.php中工作正常
updates.php 通过require_once 包含updates2.php。这也适用于updates2.php,并在我的Javascript 中调用正确的处理程序。
updates2.php 通过require_once 包含updates3.php。这在updates3.php 中不起作用——所有事件都默认为“消息”类型并且不会触发自定义处理程序。
php - 如何在不使用 sleep() 的情况下设置服务器发送事件的间隔
我正在尝试执行服务器发送事件以在客户端页面处于活动状态时不断更新数据库。为了防止 mysql 负载过重,我决定使用 sleep(10) 来设置间隔。但我发现 sleep() 函数会导致性能问题。我想知道任何方法都可以代替睡眠来进行间隔。
面临的问题:
1.重新加载页面需要很长时间。
2.虽然睡眠其他页面无法处理。
以下是我目前使用的示例代码。
spring-boot - 未找到媒体类型 = 文本/事件流的 SseEmitter MessageBodyWriter
我正在尝试让服务器发送的事件与 JavaScript Web 客户端和 Spring Boot 1.5.7 应用程序一起使用。当客户端最初连接时从 REST 端点返回 SseEmitter 时,服务器日志中出现以下错误:
REST 方法被很好地调用,我创建并保存发射器以供以后使用。当从 REST 方法返回发射器时,会抛出上述异常。
我只有在 Web 客户端(Chrome 和 Firefox)中使用 EventSource 时才得到这个,而不是在使用 curl 时。我什至可以在浏览器中输入 URL 并获得响应,而不会在服务器上出现错误。
我几乎在关注我能找到的每一个例子。
JavaScript:
服务器:
有任何想法吗?
谢谢你。
javascript - 带有事件源的 Xdebug
在 PhpStorm 调试应用程序中启动时,我遇到了一些问题。
当我访问调试应用程序的 URL 时,会为通知系统生成额外的事件源请求 (SSE)。但是当调试工作时,它会导致我无法刷新页面的问题,它只是无限期地加载 - 我没有任何断点可以确定。在我停止调试会话后立即加载。
这是怎么回事?我可以以某种方式禁用此特定 URL 的 xdebug 吗?
这些通知的代码如下所示: