Suggerirei di suddividere il tuo progetto in pezzi come segue
Innanzitutto, crea un contratto di comunicazione tra i client e i server. Il cliente dovrebbe utilizzare un'astrazione di questo contratto e non preoccuparsi che stia effettivamente comunicando su un websocket.
Quindi, costruisci un'implementazione del / i contratto / i per comunicare su una websocket. Questo potrebbe utilizzare un pattern di decorazione e decorare l'implementazione con due elementi.
- Passaggio 1: registra la chiamata
- Passaggio 2: chiama al Web
In questo modo, è possibile testare e progettare la chiamata al socket Web separatamente da come il client utilizza il contratto. Inoltre, è possibile creare un solo decoratore "registra la chiamata" per ciascuna delle implementazioni del contratto. Un altro uso di meno codice è una buona cosa:).
Mentre si può costruire un decoratore di log in qualsiasi lingua, ecco un link a una libreria di decor logger di python per dare hai un'idea di cosa intendo se sei curioso.
Altro sul passaggio 2
Se hai una sorta di protocollo di handshake in cui un contratto richiede più chiamate websocket e riceve, allora c'è un'altra domanda da considerare intorno a controllo del flusso .
- Blocco? Il contratto deve essere bloccato fino al completamento di tutte le chiamate o
- asincrono? Il client dovrebbe poter accedere al contratto in modo asincrono o
- Promessa basata? Il contratto dovrebbe essere basato sulla promessa? (popolare per i client basati sul Web)
Se registri la chiamata con lo stato in ogni fase del protocollo, puoi facilmente monitorare lo stato dell'handshake.