【问题标题】:Display the contents of an UDP package via Dash通过 Dash 显示 UDP 包的内容
【发布时间】:2021-11-22 17:14:20
【问题描述】:

我想在端口 xxxx 收到 udp 数据包时动态更新 html div。有人知道如何合并这两个部分吗?

通过合并代码,我无法同时执行两者,例如将从 udp 数据包接收到的值保存在变量中。

HTML代码:

DASH

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output

ERVER = socket.gethostbyname(socket.gethostname())
ADDR = (SERVER, PORT)
UDPClientSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)

app = dash.Dash(__name__)

app.layout = html.Div([
    html.H6("Value:"),
    html.Br(),
    html.Div(id='my-output'),

])

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

UDP 套接字:

UDP

HEADER = 64
PORT = 4501
SERVER = socket.gethostbyname(socket.gethostname())
ADDR = (SERVER, PORT)
FORMAT = 'utf-8'
DISCONNECT_MESSAGE = "!DISCONNECT"

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(ADDR)

def handle_client(conn, addr):
    print(f"[NEW CONNECTION] {addr} connected.")
    connected = True
    while connected:
            msg = conn.recv(1024)
            print(f"[{addr}] {msg}")
    conn.close()

def start():
    server.listen()
    while True:
        conn, addr = server.accept()
        thread = threading.Thread(target=handle_client, args=(conn, addr))
        thread.start()

start()

【问题讨论】:

    标签: python python-3.x udp plotly-dash


    【解决方案1】:

    是的,您需要做一些事情才能开始:

    • 异步后台任务管理器(即 Celery,查看Celery Tasks)。
    • 使用数据库来存储和传递套接字的内容(例如,Celery 使用 Redis 或 RabbitMQ)。
    • 在 dcc.Interval 对象中,查询数据库以获取最新值并在 Dash 应用中显示该值。

    【讨论】:

    • 我的项目的目的只是实时可视化 udp 中传感器发送的数据。所以我不需要保存在数据库中。我怎样才能朝着这个方向前进?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 2017-11-12
    • 2018-12-28
    • 2012-01-07
    • 1970-01-01
    相关资源
    最近更新 更多