将Dash与WebSocket一起使用

将Dash与WebSocket一起使用,websocket,callback,plotly,real-time,plotly-dash,Websocket,Callback,Plotly,Real Time,Plotly Dash,使用Dash和WebSocket构建实时仪表板的最佳方法是什么?我想在每次收到消息时更新一个图表,但我发现的唯一一件事是每x秒调用一次回调,如下面的示例所示 import dash import dash_core_components as dcc import dash_html_components as html import dash_daq as daq from dash.dependencies import Input, Output import plotly import

使用Dash和WebSocket构建实时仪表板的最佳方法是什么?我想在每次收到消息时更新一个图表,但我发现的唯一一件事是每x秒调用一次回调,如下面的示例所示

import dash
import dash_core_components as dcc
import dash_html_components as html
import dash_daq as daq
from dash.dependencies import Input, Output
import plotly
import plotly.graph_objs as go
from websocket import create_connection
from tinydb import TinyDB, Query
import json
import ssl


# Setting up the websocket and the necessary web handles
ws = create_connection(address, sslopt={"cert_reqs": ssl.CERT_NONE})


app = dash.Dash(__name__)
app.layout = html.Div(
    [
        dcc.Graph(id='live-graph', animate=True),
        dcc.Interval(
            id='graph-update',
            interval=1*1000,
            n_intervals=0)
    ]
)

@app.callback(Output('live-graph', 'figure'),
              [Input('graph-update', 'n_intervals')])

def update_graph_live(n):

    message = ws.recv()
    x=message.get('data1')
    y=message.get('data2')
        .....


    fig = go.Figure(
        data = [go.Bar(x=x,y=y)],
        layout=go.Layout(
            title=go.layout.Title(text="Bar Chart")
            )
        )
    )

    return fig

if __name__ == '__main__':
    app.run_server(debug=True)

是否有一种方法可以在每次收到消息时触发回调(以前可能会将它们存储在数据库中)?

此论坛帖子介绍了一种将websocket回调与Dash结合使用的方法:

更新 试过了,效果很好。环境是Windows10x64+Python3.7


要进行测试,请下载
.tar.gz
文件并运行
python usage.py
。它会抱怨缺少一些软件包,请安装这些软件包。可能必须在
usage.py
中编辑从
0.0.0
127.0.0.1
的地址。浏览至
http://127.0.0.1:5000
查看结果。如果我有更多的时间,我会把这个例子放在GitHub上(如果你在让它工作时遇到问题,或者原版丢失了,请ping我)。

我有两个独立的服务器:一个用于dash,另一个作为socket服务器。它们在不同的端口上运行。在收到一条消息后,我编辑了一个公共json文件,以将信息共享给dash的回调。我就是这样做的。

嘿,康坦戈,我碰巧得到了你的答案,想再问一点。你介意我们聊一会儿吗?@jtan354当然。我确实让它发挥了作用,但最终从未使用过。它将向每个连接的客户端发布相同的信息。你用什么聊天?嘿,康坦戈谢谢你的回复。然而,我设法让它工作,所以没有必要麻烦你。谢谢你主动提供帮助!:)@jtan354太棒了!很高兴你有了解决办法。如果你可以发布任何额外的信息作为Dash最新版本的另一个答案,这将有助于向前支付:)即使是你使用的Dash版本也会有帮助。