我正在製作一個應用程序,用戶要與之交互以收集各種數據(以各種方式編譯來自多個物理設備的數據)。關於構建單客戶端服務器應用程序的建議
爲此,我決定使用基於Web的用戶界面,因此大部分應用程序都在控制設備的「服務器」上運行,並使用websockets與此UI進行通信。我已使用Autobahn
(在用於處理設備的各種其他軟件包中)在Python
中編寫了此服務器。
應用自然有很多狀態:何時收集數據,收集哪些數據,把它放在哪裏,等等
不顧一切爲設備代碼,主服務器佈局像:
.
├── handlers
│ ├── handler1.py
│ └── handler2.py
├── router.py
└── server.py
現在我有主服務器的對象(Autobahn
WebSocketServerFactory
),該公司擁有國家作爲一個枚舉。它還擁有一臺路由器,它將來自客戶端的消息傳遞給它。路由器將這些消息路由到正確的處理程序,該處理程序對消息作出反應併發送響應。
處理程序需要訪問服務器的狀態,並且還能夠更改它。然而,給每個處理程序提供一個服務器對象的引用感覺就像是糟糕的形式(例如,如果我想在處理程序中導入服務器以執行靜態類型檢查,那麼我會得到循環導入:server -> router -> handler1 -> server
)。
什麼是結構良好的方式來處理這種良好的形式?我在這裏應該試圖遵循的有用的設計模式,我明顯忽略了嗎?
可能注意到:爲了讓服務器控制各種設備,我使用的是發佈/訂閱系統。這使得各種處理程序(以及我正在使用的類來收集和存儲我想要的數據)很容易簡單地訂閱來自設備的數據流。