Come indirizzare i messaggi tra i client utilizzando un server centrale in Python

0

Ho tre Raspberry Pis seduti in giro. Voglio che 2 di loro siano in grado di chattare mentre il 3 rd instrada i messaggi (funge da server tra loro).

Il flusso generale di eventi dovrebbe essere qualcosa del tipo:

  • Il server inizia a girare su Pi # 1
  • Pi # 2 inizia a funzionare e si connette al server (chi è IP sarà statico credo) con un nome che sceglie. Pi # 3 fa lo stesso di # 2.
  • Pi # 3 può quindi, conoscendo il nome di Pi # 2, inviare un messaggio a Pi # 2 usando ... qualcosa.

Questo è lo schema generale di ciò che voglio raggiungere.

Non sono sicuro di ciò che dovrebbe essere il server su Pi # 1 (ho sentito parlare di framework per server web come Flask ma non ho abbastanza conoscenza per determinare se rispondono alle mie esigenze).

Inoltre non sono sicuro su cosa dovrei usare per il lato client (Pi # 2,3). Probabilmente potrei usare le prese ma presumo che ci sia un modo migliore / più semplice.

    
posta Shookie 08.08.2014 - 22:02
fonte

2 risposte

3

Dovresti esaminare i broker di messaggi come RabbitMQ e ActiveMQ . Ci sono librerie client AMQP e STOMP in Python che puoi usare con loro.

In alternativa, se desideri un maggiore controllo, puoi utilizzare ZeroMQ , ma ciò richiederà anche più lavoro da parte tua sul server.

    
risposta data 09.08.2014 - 01:08
fonte
3

Ai vecchi tempi, si lavorava davvero e ci si preoccupava delle prese e della sporcizia della programmazione di rete. Quei giorni sono spariti per quasi tutte le lingue moderne: ci sono soluzioni più semplici.

L'essenza di ciò che stai descrivendo è quella di una coda dei messaggi . Queste sono cose che sono state costruite e possono essere utilizzate con un minimo di spese aggiuntive.

Esistono due approcci per lavorare con un messaggio che accoda i messaggi uno a uno e un modello di pubblicazione / sottoscrizione (spesso scritto "pubub").

L'essenza di one to one è che ci si connette al server che esegue una coda di messaggi e si mette un messaggio in coda, e il gioco è fatto. Allo stesso modo, puoi connetterti alla coda e ottenere un messaggio dalla coda.

Con un modello di pubblicazione / iscrizione hai qualcosa che sta spingendo i messaggi verso uno o più abbonati.

Ci sono molti altri argomenti avanzati che possono essere creati su questi ultimi con le code che inoltrano ad altre code, o che accettano selettivamente i messaggi o eseguono una chiamata di procedura remota su un altro sistema. La coda dei messaggi è la struttura sottostante per un lotto di diverse tecnologie.

Guardando RabbitMQ (solo uno dei tanti - ce ne sono molti di più là fuori) c'è un tutorial specifico per un singolo produttore e consumatore scritto in Python (e Java, e Ruby, e Php e C #) che possono essere trovati sotto la loro pagina tutorial .

Pi #2 starts running and connects to the server (who's IP will be static I guess) with a name he chooses. Pi #3 does the same as #2.

Avere un server statico è davvero l'approccio più semplice. Il server è e ti stai connettendo.

Tuttavia, se vuoi andare su "non è sempre un indirizzo IP statico" perché il tuo server dhcp non sta collaborando bene con questo, ci sono anche tecnologie per questo.

Comprendi che sto dicendo questo in quanto non ho mai usato RabbitMQ (ActiveMQ? WebSphere? sì ... Coniglio, no - ma ne ho sentito parlare bene) né sono stato più che un utente di questa tecnologia sotto altri nomi ...

Zeroconf. Questa è un'implementazione delle tecnologie note come rete di configurazione zero . L'idea è il tuo Pi # 1, quando avvierà il suo server annuncerà alla rete "Ho questo servizio disponibile!" e tutti gli altri possono quindi usarlo. Non importa dove Pi # 1 si trova sulla rete - è lì.

Ecco come funzionano alcune telecamere IP - guardi sulla tua rete locale e vedrai la videocamera trasmettere il suo indirizzo e un programma che può scoprirlo sulla rete, può farlo.

Specificamente per RabbitMQ, mi sono imbattuto in questo gist che sembra annunciare alla rete che "hey, c'è un server MQ qui "e ora il tuo Pi # 1 può essere visualizzato ovunque sulla rete e le cose funzioneranno. Perché funzionano sempre la prima volta che si affronta una tecnologia Anche se potrebbe richiedere un po 'di comprensione e approfondimento. Non suggerirei di farlo come primo passo: farlo funzionare con un server di messaggi in coda che funziona su un indirizzo IP statico, e allora iniziare a vedere come farlo trasmettere dall'indirizzo IP statico, e poi lascia che acquisisca un indirizzo dinamico. All'inizio non andare giù in quel particolare heh buca del coniglio.

    
risposta data 09.08.2014 - 02:22
fonte

Leggi altre domande sui tag