2011-11-11 13 views
8

Possiedo un sito Web complesso esistente creato utilizzando ASP.NET MVC, incluso un back-end del database, un livello dati e il livello dell'interfaccia utente Web. Ricostruire questo sito Web in un'altra lingua non è un'opzione fattibile.Comunicazione tra Node.Js e ASP.NET Applicazione MVC

Ci sono alcuni elementi dell'interfaccia utente su alcune viste (lato client) che trarrebbero vantaggio dall'interattività dal vivo, coinvolgendo sia push che pull, quindi piuttosto che implementare un qualche tipo di server di polling o websocket personalizzato in asp.net, sto cercando per sfruttare node.js per Windows e Socket.io.

Il mio problema è che ho bisogno di una comunicazione bidirezionale tra le due applicazioni. Ogni utente dovrebbe essere in grado di ricevere dati solo dopo essere stati autorizzati sul sito Web ASP.NET, quindi per prima cosa ho bisogno di comunicare. In secondo luogo, una volta determinati eventi si verificano sul sito Web ASP.NET, desidero trasferire immediatamente questi dati sul server Node, per essere trasmessi a specifici utenti o gruppi di utenti. In terzo luogo, vorrei che tutti i dati inviati al server node.js vengano inviati al sito Web ASP.NET per l'elaborazione, poiché è qui che si trova tutta la nostra logica aziendale. L'unica ragione per aggiungere Node.js è avere la possibilità di inviare dati direttamente al client, non voglio creare alcuna logica di business (o il meno possibile).

Mi piacerebbe sapere qual è il metodo più veloce di comunicazione push bidirezionale tra Node.Js e ASP.NET. L'unica buona opzione di cui sono a conoscenza fino ad ora è creare un listener speciale su una porta specifica sul server node.js e connettermi, ma mi chiedevo se c'è un metodo più elegante o più efficiente? So anche che potresti usare un database tra di loro ma sicuramente questo dovrebbe essere interrogato e sarebbe meno efficiente? Entrambi i server saranno in esecuzione sullo stesso server in un progetto di Visual Studio.

Mille grazie per l'aiuto che puoi fornire.

+0

Per i nuovi arrivati ​​a questa domanda, c'è una libreria chiamata [EdgeJS] (http://tjanczuk.github.io/edge/#/) che è un'alternativa alle soluzioni proposte. La cosa migliore è che va in entrambe le direzioni: puoi avere .NET o Node come processo di controllo. –

risposta

3

io non sono un esperto di ASP.NET, ma io credo ci sono diversi modi si può raggiungere questo obiettivo:

1) Come hai detto, si potrebbe fare di nodo in ascolto su una porta specifica per i dati e quindi reagire in base ai dati ricevuti (TCP)
2) È possibile effettuare richieste POST a Node.js (HTTP) e anche inviare una chiave di autenticazione nel processo per essere extra-sicura. Come su 1) Nodo reagirebbe ai dati inviati.
3) Utilizzare qualcosa come Redis per pub-sub, inviare messaggi da ASP.NET (pub) e ottenerli nella parte Node.js (sub). Questo è ancora meglio se si vuole scalare la vostra applicazione su più macchine ecc

2

L'unica buona opzione io sappia finora è quello di creare uno speciale ascoltatore su una porta specifica sul server node.js e connettersi a questo, ma mi stavo chiedendo se c'è un metodo più elegante o più efficiente?

Si può provare a guardare redis pub/sub modello dove l'applicazione e node.js ASP.NET MVC sarebbe comunicare attraverso canali separati al fine di ottenere la comunicazione full-duplex. Oppure puoi anche provare a usare CouchDB change nofitications.

So anche che è possibile utilizzare un database tra, ma sicuramente questo avrebbe bisogno di essere interrogato e sarebbe meno efficiente?

Le tecniche precedenti non richiedono il polling per le modifiche, ma invece ti informeranno quando le modifiche si verificano o il messaggio del canale arriva.