我正在制作一个应用程序,用户要与之交互以收集各种数据(以各种方式编译来自多个物理设备的数据)。关于构建单客户端服务器应用程序的建议
为此,我决定使用基于Web的用户界面,因此大部分应用程序都在控制设备的“服务器”上运行,并使用websockets与此UI进行通信。我已使用Autobahn
(在用于处理设备的各种其他软件包中)在Python
中编写了此服务器。
应用自然有很多状态:何时收集数据,收集哪些数据,把它放在哪里,等等
不顾一切为设备代码,主服务器布局像:
.
├── handlers
│ ├── handler1.py
│ └── handler2.py
├── router.py
└── server.py
现在我有主服务器的对象(Autobahn
WebSocketServerFactory
),该公司拥有国家作为一个枚举。它还拥有一台路由器,它将来自客户端的消息传递给它。路由器将这些消息路由到正确的处理程序,该处理程序对消息作出反应并发送响应。
处理程序需要访问服务器的状态,并且还能够更改它。然而,给每个处理程序提供一个服务器对象的引用感觉就像是糟糕的形式(例如,如果我想在处理程序中导入服务器以执行静态类型检查,那么我会得到循环导入:server -> router -> handler1 -> server
)。
什么是结构良好的方式来处理这种良好的形式?我在这里应该试图遵循的有用的设计模式,我明显忽略了吗?
可能注意到:为了让服务器控制各种设备,我使用的是发布/订阅系统。这使得各种处理程序(以及我正在使用的类来收集和存储我想要的数据)很容易简单地订阅来自设备的数据流。