问题标签 [event-stream]
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 - 来自事件流的实时 UI 同步
我正在构建一个单页 Web 应用程序,并计划利用服务器端事件流来让客户端及时了解更改。
在考虑这一点时,我想到了一个并发场景,我不确定我计划实施的解决方案是否是最好的:
- UI 订阅事件流并接收从时间 X 开始的所有新事件。
- UI 在 time 加载来自各个端点的数据
X
。例如活跃用户总数。 - 用户有时会被停用,
X
并且 UserDeactivated 事件会添加到流中。 - UI 在 time 收到一个 UserDeactivated 事件
X+1
。
此时,UI 不能盲目地将活动用户总数减少 1,因为它已经加载的总数可能已经反映了停用。
我计划用于此问题的方法是跟踪加载每一位数据的日期和时间,并订阅事件流application_loaded_time - some_offset
以确保我不会错过任何事件。
然后,当接收到事件时,每个订阅者都会检查他们负责维护的数据的获取日期和时间,如果事件发生在之后,他们将应用该事件,如果data_fetching_datetime
事件发生在之前,则忽略它data_fetching_datetime
。
这会是一个好的同步策略吗?这种方法有什么我遗漏的吗?有没有更好的办法?
我必须确保的一件事是客户端时间与服务器不同步。我可能必须添加一个自定义 HTTP 标头,指定何时开始处理请求。
对于单个聚合,我可以只依赖我加载的 AR 版本和事件版本,但对于计数等聚合查询,没有这样的版本可以利用。
注意:我没有进行事件溯源,也没有 CQRS,也没有预测。有了投影,我可以为每个视图都有一个序列号(最后处理的事件),我可以返回结果,但这里不是这种情况。我想我可以通过计算查询时特定类型的事件数来计算每个查询的版本号,但我不确定它是否会表现良好。
javascript - Docker 容器阻塞文本/事件流
我正在使用 Docker 容器和事件直播text/event-stream
。我在这里使用这个例子。当我将该示例作为 Java EE WAR 部署在本地计算机上的 TomCat 服务器上时,一切正常,并且当服务器发送随机事件数据时,我看到网页正在实时更新。
但是,当我在基于 TomCat 映像的 Docker 容器中部署此示例时,如下所示:
docker run -d --name tomcateventstream -p 8081:8080 -P -v ~/Coding/Java/webapp:/usr/local/tomcat/webapps tomcat
在后一种情况下,该示例不起作用。这些事件显然被取消了,如下图所示:
知道为什么吗?我已经围绕这个主题进行了很多搜索,我什至尝试在 Docker 方面发布所有端口,但无济于事。我确定我在某个地方遗漏了一些非常小的东西,一些带有默认 Docker 设置的东西。任何帮助将不胜感激。提前致谢!
php - 将数据从 PHP 脚本传递到 PHP 事件流
所以我有一个 PHP 文件,它会随机接收来自第三方的新发布数据。为了简单起见,我们称它为get_data.php
如下所示:
然后我有一个单独的脚本,stream.php
它使用 HTML5服务器发送事件将数据流式传输到(JS)客户端:
每个脚本本身都运行良好。但是,我需要将$data
第一个脚本传递给第二个脚本。
我知道我可以通过将变量存储在数据库或临时文件中来实现这一点,但理想情况下我可以单独通过 PHP 来做到这一点。
在另一个文件中包含一个文件看起来也不是一个好选择,因为流标头很可能会与第三方发布数据时发生冲突,我希望将数据处理与流分开,以防万一后者崩溃。
注意- 这与其他询问如何在网页上的 PHP 脚本之间传递数据的问题不重复,因为我似乎无法使用$_SESSION
变量,因为数据是由与访问事件流的用户不同的第三方发布的。
node.js - Nodejs - 从 Mongoose 导出时出现“结束后写入”错误
我正在尝试使用事件流 nodejs 将 3 Mongoose find 查询的结果写入单个文件 test.txt。
我的程序是这样的……</p>
在这个程序中,我可以将每个查找查询结果分别写入文件中。但是当我在一个程序中结合 3-find 查询时,它会抛出“write after end”错误。
谁能帮我解决这个错误?
谢谢大家的时间!
javascript - 事件流 JavaScript 阅读器如何触发页面刷新?
这是多年来我第一次向任何社区发布问题。到目前为止,我一直在使用 PHP/SQL 多年,在此期间我从未需要处理 JavaScript。
因此,也许您可以为我提供一些帮助,因为我已经尝试了所有方法而没有解决此问题。
下面的脚本目前在 PHP 驱动的网站中正常工作。在事件流中,我发布了 dyntasks.php 从应用引擎更新的文件系统上的文本文件中读取的更新
该脚本更新页面上的一个块并且它工作正常。
该块以这种形式显示文本:
现在我需要在完成特定任务 ID 后更新整个页面。“taskid”已经存储在一个变量中,它也可以在查询字符串中使用。
/index.php?id=taskmanager&fullpage=21624
我尝试了大约 20 个小时来更新 JavaScript 代码,但我无法将其安排为可以触发
location.reload(真)
你能给我一些提示吗?我想我只需要知道如何将 event.data 变量保存到一个全局变量中,以便在函数触发更新之前使用,但我们将不胜感激任何进一步的建议。
node.js - 环回事件流跟踪服务器端模型中的更改
我陷入了一种我想同步两个 mongoDB 的情况,一个在本地机器上,第二个在远程机器上(在 mlab 沙箱上)。对于同步,我正在做:
首先,我使用 mongodump 转储具有更改的集合,然后使用 mongorestore 我在远程 MongoDB 上恢复该集合。
但是我面临两个问题。
首先是如何更新远程 mongoDB 上的集合。例如:在更改集合时,我应该替换远程端的整个集合还是使用其他方式?以及这样做的最佳方法是什么。
第二个问题是如何检测集合中的变化。或在整个数据库中。我正在使用环回框架和事件流 npm 模块将更改发送到客户端。但我无法在服务器端读取更改流。
我的 server\boot\realtime.js 是:
javascript - nodejs服务器端事件只是不想工作
我一直试图弄清楚这个几个小时......
我使用了各种解释它的教程,将代码复制到我的代码中,但它不起作用。没有错误信息,什么都没有。
这是我正在做的事情:
客户:
服务器:
在stackoverflow上,有人也遇到了流问题,然后建议必须插入response.end()。它对那个人有用。我只是收到一个错误,当我这样做时连接关闭后我无法写入。这就像魔术(“错误:结束后写”)
服务器输出:
客户端输出:
客户端响应标头:
客户端请求标头:
除此之外,网络检查器中没有任何其他内容
javascript - 如何告诉量角器忽略特定的异步 Angular 任务?
我的 angularJS 应用程序使用事件蒸汽,它保持打开 http 事件蒸汽请求和监听服务器事件。所以我的问题是当量角器开始测试我的 angularJS 应用程序时,它一直等待完成事件流请求,因为我正在使用 ignoreSynchronization=false 所以量角器一直等到超时,因为事件流 http 请求永远不会完成。所以我想教我的量角器忽略此类事件流 $http 任务并继续测试我的应用程序。这些事件流在我的整个应用程序中实现,因此每次有事件流请求时量角器都会超时。
超时时出现以下错误:失败:超时等待异步 Angular 任务在 300 秒后完成。这可能是因为当前页面不是 Angular 应用程序。有关更多详细信息,请参阅常见问题解答:https ://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular 。以下任务待处理: - $http:https ://example.com/custom/xxx/sse
谁能帮我摆脱这个问题?
node.js - 从节点事件流中获取索引 split()
我正在构建一个 Node 脚本event-stream
,它通过该方法逐行遍历文件split()
,我想在结果输出中引用行号。这在我的实施中可能吗?
```
```