2015-06-06 15 views
6

Ho un front-end dell'applicazione, implementato su angularjs + nodejs + express + socket.io. C'è anche una funzione in un servizio separato. Questo servizio è scritto su akka.Qual è il modo migliore per lavorare con akka da nodejs

Ecco il modo di come l'intera pipeline di comunicazione può guardare:

[utente immette un valore] ->[angularjs ottiene il valore e inviarlo al server di nodejs attraverso socket.io] ->[nodejs riceve il valore e lo indirizza a akka] ->[akka esegue alcuni calcoli e restituisce una risposta] ->[nodejs riceve la risposta e la canalizza su angularapp].

Una possibile soluzione sarebbe quella di introdurre un middleware MQ e utilizzarlo per l'interazione, ma tale "approccio guidato dai messaggi" sembra un sovraccarico per qualcosa che sembra chiaramente una chiamata RPC. Qual è il modo migliore per creare questo tipo di comunicazione tra nodejs e akka?

+0

http://stackoverflow.com/questions/4729013/can-i-call-java-from-node-js-via-jni-and-how may help –

+0

Tuttavia, potresti utilizzare edge.js e akka.net –

+0

Non capisco cosa stai chiedendo. Se i messaggi provengono dal client tramite socket.io, devi semplicemente definire i gestori di messaggi nel codice socket.io lato server che quindi chiama il tuo servizio akka in modo appropriato ogni volta che viene ricevuto un messaggio destinato a quel servizio. Questo è il metodo che è coerente con l'architettura che sembra aver scelto. Naturalmente, nulla dice che devi farlo attraverso nodejs se in realtà non svolge alcun ruolo in questi dati. Il browser può comunicare direttamente tramite socket.io o ajax al servizio su una porta diversa. – jfriend00

risposta

6

Dal Akka speaks HTTP stesso è sufficiente effettuare una chiamata RESTful dal nodo al servizio Akka. Il pipelining è supportato in modo da renderlo molto efficiente. All'interno del flusso del server HTTP di Akka usi lo schema ask per ottenere il valore calcolato dal tuo attore.

+0

I suoni sono una grande idea. Grazie – theocat

+0

Ciao Roland. Cosa intendi per pipelining? Questa soluzione non ha una penalizzazione delle prestazioni per eseguire il marshalling/unmarshalling della richiesta http? Grazie! – naaka

4

Il modo più pulito sarebbe essere per saltare node.js/socket.io per lo strato di messaggistica e invece utilizzare WebSockets sopra spray.io direttamente. Typesafe ha un modello di attivatore solo per lo scenario di WebSockets a Akka attori: Spray and Websocket interfaces to actors

Altrimenti si sarebbe guardando una sorta di middleware RPC, forse Thrift o ZeroMQ.

Problemi correlati