使用 Wt 将图表推送到客户端
Posted
技术标签:
【中文标题】使用 Wt 将图表推送到客户端【英文标题】:Pushing a chart to the the client using Wt 【发布时间】:2013-07-19 10:02:11 【问题描述】:我在 Wt 中使用服务器推送,并尝试使用以下代码推送新图表:
Wt::WApplication::UpdateLock uiLock(app);
if (uiLock)
chart_ste = new ScatterPlotExample(this,10*asf.get_outputSamplingRate());
app->triggerUpdate();
但它会等待程序结束然后打印它,而同一程序中的以下代码会按应执行的方式每 0.5 秒推送一次单词“Demokritus:
for (int i=0; i<10; i++)
boost::this_thread::sleep(boost::posix_time::milliseconds(500));
Wt::WApplication::UpdateLock uiLock(app);
if (uiLock)
showFileName = new WText(this);
showFileName->setText(boost::lexical_cast<std::string>("Demokritus"));
app->triggerUpdate();
我的错误可能是什么?
【问题讨论】:
【参考方案1】:triggerUpdate 的文档提到 “更新不是即时的,因此在此调用之后发生的更改将同样推送到客户端。” 如果更改不是即时的,则可能是第一段代码会不断尝试以 CPU 允许的速度推送更新,因此它永远不会到达服务器,因为新的更新会覆盖最后一段,它会再次开始等待。尝试添加 boost::this_thread::sleep(boost::posix_time::milliseconds(500));查看第一段代码是否有帮助。
我曾经做过一个项目,我需要用新数据每秒更新一个图表,并且设置与你的非常相似。我从一开始就进入睡眠状态,因为我不希望我的 boost 线程使用过多的 CPU。
此外,尚不清楚第一段代码是否处于更大的循环中,如果是,您可能不应该每次都制作新图表,而是事先创建它,然后用数据更新它。我希望这会有所帮助。
【讨论】:
以上是关于使用 Wt 将图表推送到客户端的主要内容,如果未能解决你的问题,请参考以下文章
Java WebSocket 服务器 - 将消息推送到客户端
使用 Node.js 和 Socket.io 将更改推送到所有客户端