2015-09-11 7 views
6

Possiedo un'applicazione client Python Autobahn che utilizza Twisted collegata a un server Crossbar.io. L'applicazione client può riconnettersi correttamente dopo aver perso la connettività di rete utilizzando ReconnectingClientFactory. Il client registra un nome di chiamata quando è connesso in modo che altre applicazioni possano chiamarlo. Funziona sempre sulla connessione iniziale.Come ri-registrare un callee WAMP dopo una riconnessione mediante Autobahn Python con Twisted ReconnectingClientFactory?

Tuttavia, durante il ripristino da una connessione persa, il nome del chiamato non può essere registrato nuovamente perché il nome del chiamante è ancora registrato dalla precedente connessione persa. Ciò comporta l'errore "wamp.error.procedure_already_exists". Poiché la registrazione del nome del chiamato è ancora associata alla precedente connessione persa, devo annullare la registrazione del vecchio nome del chiamato.

L'unica soluzione che riesco a vedere è generare e registrare un nuovo nome di chiamata unico su ciascuna connessione per evitare di scontrarsi con i nomi di chi si è registrato in precedenza.

C'è un modo migliore o più semplice per affrontare questo? Sembra che il protocollo WAMP consentirebbe di annullare la registrazione di un nome di chiamata da un'altra connessione usando l'ID di registrazione, ma la libreria client Python Autobahn non sembra consentirlo.

+0

Puoi condividere il tuo codice? –

risposta

6

Stavo facendo la domanda sbagliata. Il server Crossbar.io dovrebbe rilevare quando un client è disconnesso e annulla automaticamente la registrazione di messaggi che appartengono a quella sessione disconnessa (per Tobias Oberstien su Twitter: https://twitter.com/oberstet/status/642241167216746496). Questa non è la responsabilità dei clienti Autobahn.

Il mio problema era che il mio server Crossbar.io non stava rilevando disconnessioni client che si verificano quando le connessioni di rete client sono state interrotte bruscamente, quindi la pulizia non si verificava.

Questo comportamento è semplicemente dovuto alla configurazione del server Crossbar. Da allora ho seguito l'esempio delle "impostazioni di produzione" documentato sul sito di Crossbar (http://crossbar.io/docs/WebSocket-Options/). Ora ho il comportamento che stavo cercando, dove le sessioni lasciate da una connessione interrotta vengono rilevate e ripulite automaticamente.

Problemi correlati