使用 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 将更改推送到所有客户端

将 mysql 查询结果推送到客户端 GWT

如何将数据从 asp.net 推送到 flash/silverlight 客户端?

使用Pushlet将消息从服务器端推送到客户端

如何将指标直接推送到 Cortex