2012-03-05 51 views
14

Para un proyecto de notificación, quisiera enviar notificaciones de eventos. Estas son cosas como iniciar sesión, cambiar de perfil, etc., y mostrarse al cliente apropiado. Me gustaría discutir algunas ideas para armarlo y obtener algunos consejos sobre el mejor enfoque.¿Cómo implementar Socket.IO con ASP.Net, IISNode, Node.JS y SQL Server para notificaciones push basadas en eventos?

Noté here que los cambios realizados en un CouchDB se pueden detectar con un flujo _changes, recogidos por Node, y se inicia un proceso. Me gustaría implementar algo como esto (estoy usando SQL Server, pero un punto de entrada en este nivel puede no ser la mejor solución).

En lugar de seguir el ejemplo de CouchDB (detectar eventos basados ​​en bases de datos, creo que esto solo complica las cosas, ya que estamos interesados ​​en eventos de clientes), estaba pensando que cuando ocurre un evento, como un inicio de sesión de usuario, se envía un mensaje al servidor del nodo con algunos detalles del evento (¿Solicitud REST?). Este mensaje se procesa y transmite a todos los clientes conectados; el cliente apropiado muestra la notificación.

ecosistema propuesto:

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

Esta voluntad ser construido en parte superior de un proyecto existente que utiliza .Net framework (IIS, etc.). Muchos de los navegadores de los clientes no son compatibles con los sockets web, por lo que el uso de Socket.IO es una buena opción (soporte de respaldo). Sin embargo, a partir de I can see, Socket.IO solo sigue siendo compatible con un sondeo largo a través de IISNode (lo cual no es realmente un problema).

Una opción sería exponer el punto final Socket.IO/Node a todos los clientes, de modo que las notificaciones basadas en el cliente se puedan enviar a través de JS al servidor Nodo, que transmite el mensaje. (sigue los ejemplos básicos de chat-servidor/cliente/servidor).

De forma alternativa, se podría usar un punto extremo IIS, pero solo podría admitir un sondeo largo (a través de Socket.IO). Esto ofrecería algo de procesamiento .Net back-end adicional, pero puede estar complicando demasiado la arquitectura.

¿Hay notificaciones de eventos basadas en SQL Server disponibles para Node?

¿Cuál sería el mejor enfoque?

Si no obtuve la configuración del ecosistema terminológico correcta, por favor aclare.

Gracias.

Respuesta

13

Le recomendaría que consulte SignalR primero antes de considerar agregar iisnode/node.js a la combinación de tecnologías de su aplicación ASP.NET preexistente.

En cuanto a websockets, independientemente de si usa ASP.NET o node.js (socket.io), solo puede usar el sondeo largo HTTP para notificaciones de baja latencia, ya que HTTP.SYS/IIS no admite websockets hasta Windows 8 . iisnode actualmente no admite websockets (incluso en Windows 8), pero dicho soporte podría agregarse más adelante.

Hice algunas investigaciones últimamente con respecto al acceso de MSSQL de node.js. Existen algunos proyectos de OSS, algunos de ellos usan extensiones nativas específicas de plataforma, algunos intentan implementar el protocolo TDS puramente en JavaScript. No conozco ninguno que le permita acceder a la funcionalidad de Notificaciones SQL. Sin embargo, el propio equipo de MSSQL está invirtiendo en un controlador MSSQL de primera clase para node.js, por lo que esto es algo que debe vigilarse en el futuro (https://github.com/tjanczuk/iisnode/issues/139).

Si va a utilizar las notificaciones SQL para admitir las notificaciones de baja latencia, recomiendo encarecidamente comenzar con las evaluaciones de rendimiento que simulan el nivel de tráfico deseado en el nivel de servidor SQL. Las notificaciones SQL se entendieron principalmente como un mecanismo para ayudar a mantener el caché de la memoria en consonancia con el contenido de la base de datos, por lo que puede cumplir o no los requisitos del escenario de notificación. Como mínimo, estas medidas lo ayudarían a comenzar con un mejor diseño.

+0

Gracias Tomasz. Usted hace una muy buena observación sobre la implementación de SignalR. Sin embargo, el problema es que el proyecto está fragmentado entre el código ASP heredado y el código .Net, por lo que creo que, por el momento, la comunicación basada en Javascript (no C#) probablemente sea la mejor opción. Si obtengo el concepto SignalR correctamente, en el futuro, cuando el proyecto se migre por completo a .Net, cambie a SiglanR. ¿Hay algunos buenos recorridos de Node.JS, IISNode y Socket.IO? También examiné algunas opciones de SQL Server, pero sobretodo para esta aplicación. – ElHaix

+0

Corrección: Implemente un enfoque SignalR en .Net 4.0 como un servicio WCF que puede ser consumido por el código ASP clásico. Resuelto – ElHaix

+1

Tomasz - ¿podría hacer esta limitación más clara en los documentos iisnode? Instalé iisnode y nodejs en mi cuadro de Windows con el objetivo principal de usar el soporte de websocket, por lo que parece que mis opciones son usar nginx o apache en Windows o moverme a Linux. – jnoss

1

Recomiendo usar Pusher. Eso es lo que usamos y lo hace fácil de implementar, ya que es una solución alojada. Así que enchufarlo y hacerlo funcionar es realmente fácil. No cuesta mucho a menos que vayas a enviar una gran cantidad de mensajes a través de él en una escala masiva.

+0

Hola Matt, ¿tienes un enlace para 'Pusher'? – pithhelmet

Cuestiones relacionadas