2012-03-05 7 views
14

Per un progetto di notifica, si desidera inviare notifiche di eventi. Queste sono cose come login, cambio di profilo, ecc., E per essere mostrate al cliente appropriato. Vorrei discutere alcune idee su come metterlo insieme e ricevere qualche consiglio sull'approccio migliore.Come implementare Socket.IO con ASP.Net, IISNode, Node.JS e SQL Server per le notifiche push basate sugli eventi?

Ho notato here che le modifiche apportate a un CouchDB possono essere rilevate con un flusso _changes, prelevato dal nodo e viene avviato un processo. Mi piacerebbe implementare qualcosa di simile (sto usando SQL Server, ma un punto di ingresso a questo livello potrebbe non essere la soluzione migliore).

Invece di seguire l'esempio di CouchDB (rilevando eventi basati su database, penso che questo complica le cose, dal momento che siamo interessati a eventi client), stavo pensando che quando si verifica un evento, come un login utente, quindi un messaggio viene inviato al server Node con alcuni dettagli dell'evento (richiesta RESTful?). Questo messaggio viene quindi elaborato e trasmesso a tutti i client connessi; il client appropriato visualizza la notifica.

ecosistema proposto:

  • .Net 4.0
  • IIS
  • IISNode
  • Socket.IO
  • Node.JS
  • SQL Server 2008

Questa volontà essere costruito su parte superiore di un progetto esistente che utilizza il framework .Net (IIS, ecc.). Molti dei browser dei client non supportano i socket Web, quindi l'uso di Socket.IO è una buona opzione (supporto fallback). Tuttavia, da quello I can see, Socket.IO supporta ancora solo il polling lungo tramite IISNode (che non è realmente un problema).

Un'opzione sarebbe quella di esporre l'endpoint Socket.IO/Node a tutti i client, in modo che le notifiche basate su client possano essere inviate tramite JS al server Node, che trasmette il messaggio. (segue gli esempi base di chat-server/client/server).

In alternativa, è possibile utilizzare un endpoint IIS, ma potrebbe supportare solo il polling lungo (tramite Socket.IO). Ciò offrirebbe un'ulteriore elaborazione back-end .Net, ma potrebbe complicare eccessivamente l'architettura.

È disponibile una notifica di evento basata su SQL Server per il nodo?

Quale sarebbe l'approccio migliore?

Se non si ottiene correttamente la configurazione dell'ecosistema terminologico, si prega di chiarire.

Grazie.

risposta

13

Si consiglia di controllare SignalR prima di considerare l'aggiunta di iisnode/node.js al mix di tecnologie dell'applicazione ASP.NET preesistente.

Per quanto riguarda i websocket, indipendentemente dall'utilizzo di ASP.NET o node.js (socket.io), è possibile utilizzare solo il polling lungo HTTP per le notifiche a bassa latenza, poiché i websocket non sono supportati da HTTP.SYS/IIS fino a Windows 8 .iisnode attualmente non supporta websocket (anche su Windows 8), ma tale supporto potrebbe essere aggiunto in seguito.

Ho fatto qualche ricerca ultimamente riguardo l'accesso MSSQL da node.js. Esistono alcuni progetti OSS, alcuni utilizzano estensioni native specifiche della piattaforma, alcuni tentano di implementare il protocollo TDS esclusivamente in JavaScript. Non sono a conoscenza di alcuno che consentirebbe di accedere alla funzionalità Notifiche SQL. Tuttavia, il team MSSQL sta investendo in un driver MSSQL di prima classe per node.js, quindi questo è qualcosa da tenere d'occhio in futuro (https://github.com/tjanczuk/iisnode/issues/139).

Se si prevede di utilizzare Notifiche SQL per supportare notifiche a bassa latenza, si consiglia vivamente di iniziare con benchmark delle prestazioni che simulino il livello di traffico desiderato a livello di server SQL. Le notifiche SQL sono state intese principalmente come un meccanismo che consente di mantenere la memoria cache coerente con il contenuto del database, quindi potrebbe o meno soddisfare i requisiti del proprio scenario di notifica. Al minimo queste misure ti aiuteranno a iniziare con un design migliore.

+0

Grazie Tomasz. Sei un ottimo punto per implementare SignalR. Tuttavia, il problema è che il progetto è frammentato tra codice ASP legacy e codice .Net, quindi penso che per ora la comunicazione basata su Javascript (non C#) sarebbe probabilmente la scelta migliore. Se ricevo correttamente il concetto SignalR, in futuro, quando il progetto viene completamente migrato su .Net, passare a SiglanR. Esistono alcuni buoni passaggi di Node.JS, IISNode e Socket.IO? Ha anche esaminato alcune opzioni di SQL Server, ma eccessivo per questa app. Correzione – ElHaix

+0

: Implementare un approccio SignalR in .Net 4.0 come servizio WCF che può essere utilizzato dal classico codice ASP. Risolto. – ElHaix

+1

Tomasz: potresti rendere questa limitazione più chiara nei documenti iisnode? Ho installato iisnode e nodejs sulla mia scatola di Windows con l'obiettivo principale di utilizzare il supporto websocket - quindi ho l'impressione che le mie scelte siano l'utilizzo di nginx o apache su Windows o il passaggio a Linux. – jnoss

1

Consiglio vivamente di utilizzare Pusher. Questo è ciò che usiamo e lo rende facile da implementare in quanto è una soluzione ospitata. Quindi collegarlo e farlo funzionare è davvero facile. Non costa molto a meno che non si stia spingendo su una quantità enorme di messaggi su di esso.

+0

Ciao Matt - hai un link per "Pusher" ?? – pithhelmet