希望你很好,感谢阅读。
一直在重新审视一个旧项目,利用两者之间的方式利用python将数据流出mysql。我从来没有好运过/ plot.ly(我确信这与我的理解比他们的平台更相关),溪流/ iframe似乎随着时间的推移而停滞不前,我不够完全排除故障。
我目前的症状是:情节随意停滞 - 我正在推送数据,但iframe没有更新。
目前的解决方案是:每隔X分钟刷新一次浏览器。
解决方案有效,但它是聚合的,因为我不明白为什么视觉效果首先停滞(是我,是它们等等)。
在我查看部分文档时,特别是此链接: https://plot.ly/streaming/
我注意到他们呼吁不要不断地打开和关闭流,并且应该经常放置心跳以保持活力/新鲜。
以下是我每10分钟拨打的电话:
pullData(mysql)
format data
open(plotly.stream1)
write data to plotly.stream1
close(plotly.stream1)
open(plotly.stream2)
write data to plotly.stream2
close(plotly.stream2)
基于我正在阅读的内容,听起来我应该在启动时实际执行一次脚本并保持流打开,但是实际的write()调用之间每隔15秒左右就会检测到heartbeat(),如下所示: / p>
open(plotly.stream1)
open(plotly.stream2)
every 10 minutes:
pullData(mysql)
format data
write data to plotly.stream1
write data to plotly.stream2
while not pulling and writing:
every 15 seconds:
heartbeat(plotly.stream1)
heartbeat(plotly.stream2)
if error:
close(plotly.stream1)
close(plotly.stream2)
请原谅sudo-mess,我只想传达一个想法。有人有什么建议吗?我开始基于流媒体示例打开,写入,关闭的原始路径,但这是一次性写入。另一个例子是恒定的数据流。我介于这两者之间。
此外 - 这一思路甚至与iframe不相关还是令人耳目一新?我的一部分认为这个症状与我的想法无关 - 数据正在变得很好 - 这是我的会话即将到期,或iframe“连接”即将过时。如果症状不相关,至少我会使我的源代码更清洁,更合适。
非常感谢任何建议!
由于 -justin
答案 0 :(得分:0)
Plotly将关闭一个非活动状态超过60秒的流。您必须在流媒体通道(心跳)下发送换行符以保持打开状态。我建议每30秒。
您的第一个代码示例可能无法按预期工作,因为当您的第一个源流(将脚本连接到我们的系统的流)退出时,客户端websocket(将Plot连接到我们的系统)可能会关闭。当您断开源流时,会向我们的系统发送一个信号,让您知道您的流现在处于非活动状态。如果新的源流没有快速重新连接,我们关闭连接websockets的客户端。
现在,当您的脚本获取更多数据并打开新流时,它将成功地将数据流传输到我们的系统,但是现在关闭的客户端websocket将不会将数据传递给Plot。我们将在幕后为您缓存一定数量的点,这样当您刷新页面时,websocket重新连接并获得最后n个点(其中n由API调用中的max-points设置)。
这就是发送心跳很重要的原因。我们保持源流打开,这反过来确保所有连接的客户端保持其websockets打开。
这不一定是流媒体平台最强大的行为,我们可能会在未来做得更好。目前,虽然通过尝试在第二个示例中实现代码,您可能会看到更好的结果。
希望有所帮助!