2015-07-06 16 views
9

Sto cercando di effettuare un passaggio incrementale su un'applicazione API legacy a Phoenix. Idealmente, vorrei ritagliare i sottodomini della mia applicazione in app Phoenix separate e ospitarli su diversi nodi del server.Come connettersi a un canale app Phoenix remoto/esterno da un'altra app Phoenix?

Spero di utilizzare i canali Phoenix per facilitare la comunicazione tra app e app. Come posso collegare un'app Phoenix ai canali e agli argomenti di un altro? Ad esempio, mi piacerebbe impostare un sottodominio 'jobs.foo.com' con WebSockets come:

socket "/ws", Jobs do 
    channel "jobs:work_orders", WorkOrdersChannel 
end 

Da un altro app Phoenix (ex: Reports) Vorrei pub/sub a tale argomento canale Jobs . Sarebbe consigliabile creare una lib di lavori Phoenix.Endpoint in Report e configurare quell'URL Jobs.Endpoint in config.exs? Potrei quindi utilizzare qualcosa come Phoenix.PubSub.subscribe/4 con quell'endpoint pubsub denominato?

Non sono sicuro che ciò che sto pensando abbia senso. Se c'è un approccio più consigliabile, sono aperto a suggerimenti.

- EDIT -

tanto per chiarire quello che sto cercando di realizzare ... Sto volendo fare uno Phoenix app connettersi ad un altro tramite un client WebSocket. Ciò mi consentirà di avere app, con logica di dominio diversa, comunicare tramite eventi su canali e argomenti di interesse comune.

risposta

4

Ok, ho trovato un modo per creare client WebSocket nelle mie varie app Phoenix e consentire la comunicazione tra app e app su canali e argomenti remoti. Ho preso i miei spunti da:

channel_test.exs

e

websocket_client.exs

ho praticamente copiato il codice websocket_client.exs nella directory del mio app ../lib, quindi caricato e alias'ed esso. Dopo di ciò, ho potuto collegare un'app alla presa remota di un'altra app, molto simile a quanto fatto in channel_test.exs. Ho attivato due diverse app Phoenix, su due macchine diverse, e ho potuto inviare e ricevere messaggi attraverso i canali.

Non dimenticare di aggiungere {:websocket_client, github: "jeremyong/websocket_client"} alle tue dipendenze mix.exs.

4

Penso che potresti voler esaminare Phoenix.PubSub - finché riesci a connettere i tuoi nodi in un cluster (o anche senza di essi, utilizzando un DB o un backend Redis) dovresti riuscire a farli parlare tra loro oltre questo.

+1

Anche qualcosa come RabbitMQ può essere un'opzione. –

+1

@ pawel-obrok Ho guardato Phoenix.PubSub per i puntatori. Non mi è ancora chiaro come fare per rendere la mia app Reports Phoenix unirsi/iscriversi al canale app "jobs: work_orders" dell'app Jobs remoto come client. Posso connettere le mie app usando Node.connect in un cluster, ma questo accoppia le diverse aree di interesse in modo più stretto di quanto speravo. Il client JS usa 'new Socket (" SOME_LOCATION "). Connect()' per stabilire una connessione e quindi unirsi a un canale. Sto cercando una sorta di equivalente interno a Elixir/Phoenix. –

+0

'PubSub' non è usato per iscriversi ai canali esistenti. Piuttosto si tratta di un meccanismo di comunicazione separato che ha i suoi argomenti a cui ti abboni/pubblichi. –