Mucho se habla de node.js de que permite tiempo real y llevar la lógica de una aplicación al lado del cliente y quitar peso al servidor.
He visto muchos ejemplos de listas de tareas y chats.
¿Pero qué usos reales le dais a node.js a parte de estos ejemplos?
Personalmente llevo bastantes meses desarrollando backbeam.io Está implementado 100% en node.js. Son más de 24k líneas de código. Más de 30k contando otros ficheros no javascript. No es el primer proyecto que hago en nodejs pero sí el más grande.
¿Qué usos reales le doy a nodejs? Bueno, para mi es una herramienta genial para todo tipo de cosas. Aplicaciones web, aplicaciones en línea de comandos, scripts para administración de sistemas, todo tipo de aplicaciones de red, etc.
Lo que más me gusta de nodejs es que es rápido, muy rápido. Para mi es muy importante este aspecto por varias razones: 1) el desarrollo es más rápido 2) ejecutar tests de unidad es más rápido 3) tus aplicaciones son más rápidas y por tanto la experiencia de usuario es mejor 4) menor coste de infraestrucutra (Linkedin pasó de tener 15 servidores a 4). Por ejemplo puedo ejecutar todos mis tests (más de 7k líneas de código en tests que hacen tareas de criptografía, conversión de imágenes, acceso a base de datos, llamadas http,... en 10 segundos).
Me gusta mucho también su flexibilidad. En otros entornos tienes un servidor "monolítico" (apache, tomcat, etc.) y tu aplicación se "despliega" en él, y tienes unas estructuras de directorios y ficheros de configuración muy concretos. En nodejs tú lanzas el servidor web, y si quieres puedes lanzar varios, y si quieres puedes lanzar a la vez un servidor ftp, y los lanzas desde el directorio que quieras... Al fin y al cabo lanzar un servidor http es simplemente usar el módulo http y llamar a un método. Todo esto a mi me ha dado la posibilidad de implementar funcionalidades que en otros entornos no hubieran sido posibles. Por ejemplo puedo "instalar" certificados SSL en caliente, sin reiniciar servidores, sin cambiar ficheros de configuración,... Desde los tests de integración lanzo fácilmente la aplicación web y la paro simplemente llamando a métodos de mi código, sin necesidad de hacer integraciones más sofisticadas. También me he implementado un sistema de deploy sin downtimes, y más cosas de "bajo nivel" que han sido fáciles de implementar y en otros entornos no hubiera sido si quiera posible hacerlo tan eficientemente.
También me ha venido genial en mi caso poder ejecutar código javascript dado por el usuario gracias al módulo vm http://nodejs.org/api/vm.html
Y para hacer aplicaciones web como las que se hacen en java, php, .net, etc. es igualmente válido y tiene muchísimos módulos de alto nivel para cuando no necesitas hacer cosas sofisticadas. Al final lo del tiempo real es una "feature" más, pero puedes hacer cualquier tipo de aplicación web.
Para scripts de administración de sistemas vienen genial módulos como shelljs http://documentup.com/arturadib/shelljs, commander https://npmjs.org/package/commander y con dnode https://github.com/substack/dnode hago aplicaciones con las que puedo "hablar" desde otra aplicación para obtener información o cambiar configuraciones en caliente.
No se el tipo de aplicaciones web en el que lo habéis utilizado, ¿pero no os ha parecido un poco inmaduro todavía?
En cuanto a apliaciones web tan sólo he realizado algunos experimentos, pero me ha parecido que todavía le queda bastante por avanzar.
He trabajado con nodejs en producción desde la versión 0.6 y empecé a probarlo en la 0.4 y por aquel entonces sí que solías encontrar problemas con módulos de terceros poco maduros pero a día de hoy considero que es una plataforma muy estable y con una gran comunidad y muchos módulos de gran calidad, sólidos y perfectamente maduros. Por ejemplo expressjs como framework web ya va por la versión 3.0 y me parece el framework web más completo y flexible y sencillo que he visto en cualquier lenguaje de programación.
Node en sí mismo ya está casi en la recta final para la 1.0. No es aún una 1.0 simplemente porque quienes lo desarrollan se han empeñado en que la 1.0 sea de una calidad excepcional. Por ejemplo la actual versión 0.10 se ha centrado sobre todo en re escribir el api de streams interna y en la 0.12 se centrarán en mejorar el soporte del protocolo http. Pero no va a haber muchos más cambios.
Porque consideras que es inmaduro? es una cosa que escucho bastante, pero me gustaría saber que le falta a node para que pueda considerarse maduro. Es cierto que pueden faltarle muchas cosas pero creo que cada vez se está separando mas de esa idea :)
Pues me refiero sobretodo a cosas como las que ha comentado Alberto, por una parte había muchos módulos de terceros muy inmaduros y sin ningún mantenimiento y sobretodo en la parte para aplicaciones web veía que frameworks como express por ejemplo parecían demasiado "experimentales", no sólo en cuanto a funcionalidades sino a cambios en las APIs que hacían que la aplicación dejara de funcionar entre versiones.
De todas maneras hace ya un tiempo que no lo toco así que puede ser que esté todo un poco más maduro.
En Focus On Emotions utilizamos node.js + socket.IO un proyecto de control de pedidos dentro de Ikea. Tenemos pantallas con clientes web en la zona de preparación y también en la zona de comida, donde se muestran los pedidos en preparación y los que están listos para recoger.
En mi caso (@dymotics) que son unos dispositivos independientes domóticos los utilizamos para mantener la conexión permanente entre los dispositivos que tengas instalados en casa y el servidor.
De forma que tanto el dispositivo como la aplicación pueden mandar instrucciones y que el otro las reciba a tiempo real. Funciona realmente rápido es instantaneo. Hemos hecho incluso pruebas con carga, y con un WIFI muy saturado y funciona sin problema :)
Además si vienes de javascript, es muy fácil de usar por lo que lo recomiendo y se hacen cosas muy rápido!
En www.parkuik.com lo usamos en conjunto con MongoDB y express tanto para servir el contenido dinámico de la página web como el API, y no puedo estar as contento con ello! Una maaravilla desde mi punto de vista :)
Eso si, estamos hablando también de una página "amateur", pero hay proyectos mas profesionales aquí que también lo usan
Muy buen hilo.. aqui algunas preguntas..
tiene sentido usar node.js en tareas que exigen mucha I/O?
Entiendo que tiene sentido en NOSQL o base de datos JSON, donde básicamente no necesitas manipular los datos.
Pero y si el backend realiza muchas operaciones (I/O, algoritmos, etc).. merece la pena pasar del clásico WebServer stack a node.js?
El quid de la cuestión de Node.js es precisamente cómo está implementada la I/O:
"Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient"
Exacto,
pero una base de datos o las operaciones a disco va a ser siempre el cuello de botella de aplicaciones node.js... o creo yo!
Es quizas el concepto "event-driven" el más interesante. Y en terminos de escalabilidad, node.js debe der ser más eficiente que otros modelos como java, php, python, node.js...
Eso no es del todo correcto. Con lenguajes síncronos como python o c++ en donde tiras varias consultas dentro de un for, tienes que esperar más por cada ciclo. Las bases de datos soportan operaciones concurrentes, por lo cual lo más lógico es usar operaciones asíncronas. Las operaciones de una bd siempre son un cuello de botella, pero con node js esos cuellos de botella se reducen.
En Kurento.org estoy usando Node.js para desarrollar las APIs Javascript, y asi de paso matamos dos pajaros de un tiro (tenemos APIs para Node.js y navegador con la mitad de esfuerzo :-P ), aparte de que el workflow y el estilo de diseño que ofrece Node.js es mucho mas sencillo de mantener :-)
yo desarrollé un bot jabber asistente para sistemas unix, Naidbot: http://www.alejandroelinformatico.com/projects/naidbot/
Al igual que Hubot(de Github) está enfocado a ejecutar comandos, previamente definidos, desde tu cliente de chat favorito. Las ventajas de Naidbot vs Hubot es que tienes un control absolutos de usuarios, grupos y permisos! además de poder ejecutar cualquier script que esté escrito en el lenguaje que quieras.
Usa mongodb para gestionar los usuarios y los permisos, el resto está escrito íntegramente en javascript corriendo sobre node.js. Estoy bastante contento con el rendimiento, pero al igual que otras personas comentan, depende qué módulos aun están demasiado inmaduros, por ejemplo los módulos para XMPP, yo he tenido que hacer varios fixes. Lo que más destaco es el event emitter para mi gestión de plugins y sincronización entre varios módulos, timeouts e intervals para que cada usuario se cree un sistema de ejecución automatizado de sus comandos, rapidez de acceso a mongodb, gestión de sockets para que apps de terceros usen Naidbot y la sintaxis javascript, claro :D
Soy un desarrollador front-end y mi día a día es programar en javascript, y me fue muy fácil programar el bot, pero me di cuenta que hay muchas tareas del lado del servidor. por la propia naturaleza asíncrona de node.js, que se han de realizar de manera asíncrona y hay veces que no te interesa hacerlo de esta manera y si quieres hacerlo de manera síncrona entonces estás obligado a instalar muchos más módulos poco maduros.
También he montado un web-service con socket.io para hacer real-time en dispositivos móviles y estoy muy contento.
para retomar el tema, hace unas semanas me puse el reto de ver que podía hacer con node.js que no fuera un chat, preparé una charla y unas 4 demos para el último betabeers en madrid.
- mariojs: usa un móvil como controlador de mario
- housejs: usa el móvil para controlar dispositivos de un hogar como luz, temperatura y música
- discojs: cola de pedidos de bebidas
- rockjs: concierto con efectos de luces
aquí tenéis el video de la demo de rockjs, el sonido esta un poco desincronizado pero se pueden ver los efectos :)
http://www.youtube.com/watch?v=5W7vdec_U-U
podéis ver el código en github
https://github.com/miquelcamps/websockets_lab
Sustituye. Pero no solo a PHP, al stack Apache+PHP, ya que Node.js puede actuar como servidor http. Pero ésto por lo que he leído, que justamente acabo de instalarme node en el equipo, y he empezado a trastear.
No sustituye, es una forma mas de agregar una capa a tu programación, es como decir que php sustituye a HTML, o HTML5 sustituye a HTML, es un nuevo paradigma de programación....
Me estoy planteando usar nodejs + mongodb, para el backend de una app de recetas. En principio solo sera mobile, pero podrá llegar a tener parte web. Es un proyecto personal para poder aprender bien estas 2 tecnologias y salir un poco de RoR, como lo veis? Alguna experiencia/opinión usando node.js con mongo? y como API REST?
Hace tiempo hice un pequeño tutorial de como hacer una API REST con Node.js y MongoDB, por si le quieres echar un vistazo :)
http://carlosazaustre.es/blog/como-crear-una-api-rest-usando-node-js/
Holas ta veo q por aki hay mucha experiencia en node.js ...... xfa tengo este problema ... tengo un servicio web desarrollado en .Net ... y lo que kiero es consumir ese servicio web en un servidor de node.js ...... xfavor nose si podrian colaborarme . :D
Teniendo en cuenta, que te decides por Node.JS para un backend, y algún día quieres desarrollar una parte front. Que usais como mejor opción pensando en el SEO, y que quiero consumir mi propia API? Sabiendo que backbone y angular no son nada SEO-friendly.
A ver si me podéis aclarar un poco las cosas. Vamos a cambiar nuestra framework de desarrollo porque está obsoleta, y aunque la actual es Java, también programamos en Javascript y jQuery, así que nos hemos planteado la posibilidad de cambiar de Java a Node + Express + Angular. Desafortunadamente, el administrador en la empresa es pro Windows, y odia Linux, y utilizamos como bases de datos Oracle y Postgres.
He estado probando a acceder con Node a ambas bases de datos en Windows, y no hay drivers que funcionen: o en Windows directamente no van, o hay que instalar Python, recompilar con Visual Studio (que no tenemos), etc.
Así que os quería preguntar si veis alguna salida, o mejor olvidarnos de Node y Angular mientras usemos Windows.
Supongo que una posible alternativa sería montar un backend con Java que proporcionara el acceso a base de datos a través de servicios REST, y acceder a ese backend desde Angular con JSON, pero en ese caso no sé si no tiene más sentido decantarse totalmente por Java...
Gracias por ayudar. He estado probando algo más, y he hecho algún adelanto, lo escribo aquí por si le ayuda a alguien en el futuro.
En cuanto a node-postgres, me he enterado que el mismo autor tiene una versión alternativa que es sólo javascript: https://github.com/brianc/node-postgres-pure, por lo que al instalarla no hay que compilar, basta hacer simplemente "npm install pg.js". Esa funciona, he probado con éxito a acceder a una tabla de una bbdd que tenemos por aquí. En cuanto a la versión normal, que hay que compilar, he instalado Python 2.7 y Microsoft Visual Studio 2012, y al hacer "npm install pg --msvs-version=2012" (el switch es porque si no, busca Visual Studio 2010) me da errores porque no encuentra los ficheros de Postgres. Entiendo que si lo instalara compilaría bien, pero dado que la versión de sólo javascript funciona, ya no pierdo el tiempo más.
En cuanto a node-oracle, no he tenido tanta suerte. Siguiendo todos los pasos (instalar Python 2.7, MS Visual Studio 2012, Instant Client 12 Basic y SDK, fijar variables de entorno), al instalar con "npm install oracle --msvs-version=2012" da una serie de warnings que asustan, por ejemplo:
..\src\outParam.cpp(37): warning C4244: '=' : conversión de 'double' a 'int'; posible pérdida de datos [C:\temp\mean\prueba2\node_modules\oracle\build\oracle_bindings.vcxproj]
La instalación acaba con unos cuantos warnings, y ningún error, pero al probar el ejemplo del autor, no va. No da error, pero no devuelve nada. De hecho, un simple console.log no funciona en el momento que se hace var oracle = require('oracle'); dentro del javascript.
He conseguido que funcione también la parte de Oracle, aunque los warnings de conversión de datos siguen saliendo al instalar. El problema era que en el path tenía otros directorios con otras instalaciones de Oracle, y parece ser que se estaba liando. Dejando únicamente las dos rutas que mencionan las instrucciones de instalación, correspondientes al InstantClient 12, el ejemplo del autor funciona correctamente.
En cualquier caso, menuda movida para hacer que esto funcione, y supongo que no puedo copiar el directorio que contiene el módulo, ya compilado, de mi pc, que es Windows 7 64 bits a un servidor Windows 2003 Server 32 bits, y no lo sé a un Windows 2008 Server 64 bits... Si hay que hacer la compilación e instalar Visual Studio, Python, etc. para ello en cada tipo de servidor, qué rollo.
La verdad es que supongo que la mayoría de gente que programa en Node.js usa Mac/Linux y por tanto los módulos tienen mejor soporte para estos sistemas que para Windows :-/
Por otro lado Oracle nunca se ha caracterizado en mi opinión por hacer las cosas fáciles en cuanto a instalación o mantenimiento :P
De la web de Google:
Chrome Experiments es un sitio web creado por Google para mostrar las aplicaciones web creativas que se han creado con las tecnologías HTML5 más recientes. Una de esas aplicaciones web es un juego de laberintos en 3D interactivo llamado World Wide Maze (WWM), desarrollado por el equipo de Chrome en cooperación con colaboradores externos.
Chrome Experiments:
http://www.chromeexperiments.com/
World Wide Maze (WWM):
http://www.chromeexperiments.com/detail/world-wide-maze/
Tengo una duda, soy programador en LAMP, estoy utilizando NODE para una aplicacion escalable, y la verdad me sorprendio , la velocidad y la manera de ser no bloqueante es maravilloso.
Ahora empiezo a pensar en realizar el front end en NODE.
Pero mi pregunta, es la siguiente, (Apenas empiezo a usar node, asi que sed un poco condescendientes conmigo)
En la aplicacion que tengo mediante AJAX le pregunto ala BD si hay cambios, si existen los bajo mediante JSON (simple)
Podria usar un websocket para cuando ocurren cambios en la DB obtener los cambios? Se que wl sebsocket puede hacer eso, de navegador a navegador , como en un demo, que vi,
pero puede tambien EL node.js saber cuando ocurren un cambio nuevo en la BD, como por ejemplo un insert, y avisar a quienes estan viendo esa tabla, por ejemplo??
O estoy planteando algo basado en un error de concepto?
Me explique bien? o quedo un poco liado?
Agradezco cualquier empujoncito
Nosotros tuvimos el mismo problema ya que estamos haciendo una web app que notifique en el front cuando se hace una operación en BBDD, para esto utilizamos esta libreria de php http://elephant.io/#usage permite conectar al websocket y enviar una notificación.
pero eso es para php, no para javascript, aunque el concepto es el mismo, ocupar sockets. En mi respuesta hago referencia a sockets.io que es un módulo para node.
Yo tengo que desarrollar un sistema con notificaciones tipo facebook y chat, y vamos a usar socket.io
Lo que se me ha ocurrido es crear un mecanismo mediante eventos que me avisen cuando un dato ha cambiado (notificaciones nuevas o que se yo), y luego ver a quién le corresponde recibir dichos cambios mediante un mecanismo centralizado.
Por ponerte algunos ejemplos actualmente estoy desarrollando una aplicación de blogs.
Es una chorrada para aprender, pero en cuanto esté terminado lo cuelgo en algún server y va a ser mi blog personal.
También recuerdo que hace algún tiempo hice una aplicación web de mensajería instantánea usando Socket.io y node.js e iba de p**a madre.
Yo estoy igual que la pregunta llevo varios años desarrollando y todos hablan de rapidez, se sincroniza más rápido, es mejor, mas liviano, pero eso para mi no son usos, son características, un "uso real" son como los ejemplos trillados que hay por todos lados:
"un chat", "una pizarra para escribir", "mostrar tweets en tiempo real", pero de ahi nadie sale.
Creo que es una tecnología muy nueva y los que ya llevan tiempo utilizando aún no encuentran usos concretos y solo la usan por usar, aunque si esta interesante este nuevo modo de programar.
Nosotros la usamos como backend junto a mongodb, para manejar gran cantidad de información. Con otros sistemas hubiera sido bastante más caro (coste en máquina) o directamente imposible de implementar con las características que ofrecemos actualmente.
Nosotros queriamos aprender a utilizarlo y nos meteimos de lleno con el en un proyecto que nos habian encargado, en el que habia que suministrar datos de MYSQL a dispositivos moviles y a una pagina web que el cliente tenian echa en WordPress (http://farmaciaolofpalme.com/guardias/).
La web esta en el proveedor de hosting y el node.js esta en un servidor (en un W7) en las instalaciones del cliente, ya que el proveedor de hosting le dijo que no le podia dar ese servicio.
Si ves la pagina, hay tres iframe que presentan el contenido suministrado por el node.js, dandole a la pagina una funcionalidad dinamica, refrescando las consultas sin volver a cargar la pagina, incluso redimensionando el iframe si hace falta (bueno, con chrome crece, pero no lo reduce no sabemos aun porque).
Como puedes ver las consultas son instantaneas, tarda más el navegador en pintar los cambio que la consulta en si.
Elegimo Node.JS por que todo el mundo comentaba que era lo ideal para proyectos en los que habia que soportar muchas conexiones concurrentes, reconozco que nuestros conocimientos en JavaScript eran bastante limitados, pero la curva de aprendizaje ha sido muy corta, realmente lo que mas nos costo es pensar en asincrono, pero una vez que lo tienes claro es brutal.
No tiene una estructura definida, por lo que fuimos cogiendo de aqui y de alla lo que nos parecia más interesante y nos creamos nuestra propia estructura el proyecto.
Con los dispositivos moviles va muy bien, no hemos notao cuellos de botella, aunque aun no esta en distibución ya tenemos la beta funcionando en unos 100 dispositivos, esperamos poder distibuirlo en septiembre.
No lo dudes, es una herramienta increible.
He visto muchos ejemplos de listas de tareas y chats.
¿Pero qué usos reales le dais a node.js a parte de estos ejemplos?
Por el momento sólo conozco que linkedin lo usa en su app HTML5 para hacerla más rápida.
Sería genial conocer la experiencia de como habéis implementado node.js a vuestras apps o webs, comenta!
17/03/2013 17:16
¿Qué usos reales le doy a nodejs? Bueno, para mi es una herramienta genial para todo tipo de cosas. Aplicaciones web, aplicaciones en línea de comandos, scripts para administración de sistemas, todo tipo de aplicaciones de red, etc.
Lo que más me gusta de nodejs es que es rápido, muy rápido. Para mi es muy importante este aspecto por varias razones: 1) el desarrollo es más rápido 2) ejecutar tests de unidad es más rápido 3) tus aplicaciones son más rápidas y por tanto la experiencia de usuario es mejor 4) menor coste de infraestrucutra (Linkedin pasó de tener 15 servidores a 4). Por ejemplo puedo ejecutar todos mis tests (más de 7k líneas de código en tests que hacen tareas de criptografía, conversión de imágenes, acceso a base de datos, llamadas http,... en 10 segundos).
Me gusta mucho también su flexibilidad. En otros entornos tienes un servidor "monolítico" (apache, tomcat, etc.) y tu aplicación se "despliega" en él, y tienes unas estructuras de directorios y ficheros de configuración muy concretos. En nodejs tú lanzas el servidor web, y si quieres puedes lanzar varios, y si quieres puedes lanzar a la vez un servidor ftp, y los lanzas desde el directorio que quieras... Al fin y al cabo lanzar un servidor http es simplemente usar el módulo http y llamar a un método. Todo esto a mi me ha dado la posibilidad de implementar funcionalidades que en otros entornos no hubieran sido posibles. Por ejemplo puedo "instalar" certificados SSL en caliente, sin reiniciar servidores, sin cambiar ficheros de configuración,... Desde los tests de integración lanzo fácilmente la aplicación web y la paro simplemente llamando a métodos de mi código, sin necesidad de hacer integraciones más sofisticadas. También me he implementado un sistema de deploy sin downtimes, y más cosas de "bajo nivel" que han sido fáciles de implementar y en otros entornos no hubiera sido si quiera posible hacerlo tan eficientemente.
También me ha venido genial en mi caso poder ejecutar código javascript dado por el usuario gracias al módulo vm http://nodejs.org/api/vm.html
Y para hacer aplicaciones web como las que se hacen en java, php, .net, etc. es igualmente válido y tiene muchísimos módulos de alto nivel para cuando no necesitas hacer cosas sofisticadas. Al final lo del tiempo real es una "feature" más, pero puedes hacer cualquier tipo de aplicación web.
Para scripts de administración de sistemas vienen genial módulos como shelljs http://documentup.com/arturadib/shelljs, commander https://npmjs.org/package/commander y con dnode https://github.com/substack/dnode hago aplicaciones con las que puedo "hablar" desde otra aplicación para obtener información o cambiar configuraciones en caliente.
17/03/2013 20:44
En cuanto a apliaciones web tan sólo he realizado algunos experimentos, pero me ha parecido que todavía le queda bastante por avanzar.
P.D: me sumo a lo que se comenta de la charla.
17/03/2013 23:19
Node en sí mismo ya está casi en la recta final para la 1.0. No es aún una 1.0 simplemente porque quienes lo desarrollan se han empeñado en que la 1.0 sea de una calidad excepcional. Por ejemplo la actual versión 0.10 se ha centrado sobre todo en re escribir el api de streams interna y en la 0.12 se centrarán en mejorar el soporte del protocolo http. Pero no va a haber muchos más cambios.
Saludos!
17/03/2013 22:40
18/03/2013 00:56
De todas maneras hace ya un tiempo que no lo toco así que puede ser que esté todo un poco más maduro.
17/03/2013 14:45
17/03/2013 13:49
De forma que tanto el dispositivo como la aplicación pueden mandar instrucciones y que el otro las reciba a tiempo real. Funciona realmente rápido es instantaneo. Hemos hecho incluso pruebas con carga, y con un WIFI muy saturado y funciona sin problema :)
Además si vienes de javascript, es muy fácil de usar por lo que lo recomiendo y se hacen cosas muy rápido!
17/03/2013 17:18
17/03/2013 17:19
17/03/2013 17:33
¡Gracias por vuestro interés!
17/03/2013 17:49
17/03/2013 17:48
Eso si, estamos hablando también de una página "amateur", pero hay proyectos mas profesionales aquí que también lo usan
25/11/2013 00:03
https://www.paypal-engineering.com/2013/11/22/node-js-at-paypal/
incluso han liberado krakenjs un framework para node.js
http://krakenjs.com
03/04/2014 17:27
Muy buen hilo.. aqui algunas preguntas..
tiene sentido usar node.js en tareas que exigen mucha I/O?
Entiendo que tiene sentido en NOSQL o base de datos JSON, donde básicamente no necesitas manipular los datos.
Pero y si el backend realiza muchas operaciones (I/O, algoritmos, etc).. merece la pena pasar del clásico WebServer stack a node.js?
03/04/2014 17:39
"Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient"
03/04/2014 17:45
pero una base de datos o las operaciones a disco va a ser siempre el cuello de botella de aplicaciones node.js... o creo yo!
Es quizas el concepto "event-driven" el más interesante. Y en terminos de escalabilidad, node.js debe der ser más eficiente que otros modelos como java, php, python, node.js...
13/08/2014 15:46
01/07/2014 12:48
17/03/2013 23:56
18/03/2013 11:21
Al igual que Hubot(de Github) está enfocado a ejecutar comandos, previamente definidos, desde tu cliente de chat favorito. Las ventajas de Naidbot vs Hubot es que tienes un control absolutos de usuarios, grupos y permisos! además de poder ejecutar cualquier script que esté escrito en el lenguaje que quieras.
Usa mongodb para gestionar los usuarios y los permisos, el resto está escrito íntegramente en javascript corriendo sobre node.js. Estoy bastante contento con el rendimiento, pero al igual que otras personas comentan, depende qué módulos aun están demasiado inmaduros, por ejemplo los módulos para XMPP, yo he tenido que hacer varios fixes. Lo que más destaco es el event emitter para mi gestión de plugins y sincronización entre varios módulos, timeouts e intervals para que cada usuario se cree un sistema de ejecución automatizado de sus comandos, rapidez de acceso a mongodb, gestión de sockets para que apps de terceros usen Naidbot y la sintaxis javascript, claro :D
Soy un desarrollador front-end y mi día a día es programar en javascript, y me fue muy fácil programar el bot, pero me di cuenta que hay muchas tareas del lado del servidor. por la propia naturaleza asíncrona de node.js, que se han de realizar de manera asíncrona y hay veces que no te interesa hacerlo de esta manera y si quieres hacerlo de manera síncrona entonces estás obligado a instalar muchos más módulos poco maduros.
También he montado un web-service con socket.io para hacer real-time en dispositivos móviles y estoy muy contento.
28/04/2013 00:04
- mariojs: usa un móvil como controlador de mario
- housejs: usa el móvil para controlar dispositivos de un hogar como luz, temperatura y música
- discojs: cola de pedidos de bebidas
- rockjs: concierto con efectos de luces
aquí tenéis el video de la demo de rockjs, el sonido esta un poco desincronizado pero se pueden ver los efectos :)
http://www.youtube.com/watch?v=5W7vdec_U-U
podéis ver el código en github
https://github.com/miquelcamps/websockets_lab
12/02/2016 21:37
02/07/2013 13:49
http://www.geoquedada.com
18/01/2014 18:44
Veo una gran ventaja utilizar el mismo lenguaje en servidor y cliente.
18/01/2014 19:01
18/01/2014 18:54
18/01/2014 18:57
18/01/2014 18:57
18/01/2014 19:10
12/02/2016 21:38
27/01/2014 12:09
27/01/2014 12:11
http://carlosazaustre.es/blog/como-crear-una-api-rest-usando-node-js/
Saludos!
28/01/2014 12:21
28/01/2014 23:17
29/01/2014 00:06
1- no hacer tantas faltas de ortografía.
2- abrir un nuevo hilo explicando como es tu servicio y tus dudas.
30/01/2014 11:12
30/01/2014 11:15
http://scotch.io/tutorials/javascript/angularjs-seo-with-prerender-io
Con Prerender.io se crean snapshots de tus vistas generadas con Angular (y supongo que también con Backbone) para que sean indexables por Google.
30/01/2014 16:39
Ya podria hacer algo google con los spiders... y más cuando AngularJS es un proyecto suyo
25/03/2014 14:05
A ver si me podéis aclarar un poco las cosas. Vamos a cambiar nuestra framework de desarrollo porque está obsoleta, y aunque la actual es Java, también programamos en Javascript y jQuery, así que nos hemos planteado la posibilidad de cambiar de Java a Node + Express + Angular. Desafortunadamente, el administrador en la empresa es pro Windows, y odia Linux, y utilizamos como bases de datos Oracle y Postgres.
He estado probando a acceder con Node a ambas bases de datos en Windows, y no hay drivers que funcionen: o en Windows directamente no van, o hay que instalar Python, recompilar con Visual Studio (que no tenemos), etc.
Así que os quería preguntar si veis alguna salida, o mejor olvidarnos de Node y Angular mientras usemos Windows.
Supongo que una posible alternativa sería montar un backend con Java que proporcionara el acceso a base de datos a través de servicios REST, y acceder a ese backend desde Angular con JSON, pero en ese caso no sé si no tiene más sentido decantarse totalmente por Java...
Muchas gracias,
Carlos
26/03/2014 03:14
https://github.com/brianc/node-postgres
Por lo que veo debería funcionar. Y es un proyecto muy maduro.
26/03/2014 13:41
Gracias por ayudar. He estado probando algo más, y he hecho algún adelanto, lo escribo aquí por si le ayuda a alguien en el futuro.
En cuanto a node-postgres, me he enterado que el mismo autor tiene una versión alternativa que es sólo javascript: https://github.com/brianc/node-postgres-pure, por lo que al instalarla no hay que compilar, basta hacer simplemente "npm install pg.js". Esa funciona, he probado con éxito a acceder a una tabla de una bbdd que tenemos por aquí. En cuanto a la versión normal, que hay que compilar, he instalado Python 2.7 y Microsoft Visual Studio 2012, y al hacer "npm install pg --msvs-version=2012" (el switch es porque si no, busca Visual Studio 2010) me da errores porque no encuentra los ficheros de Postgres. Entiendo que si lo instalara compilaría bien, pero dado que la versión de sólo javascript funciona, ya no pierdo el tiempo más.
En cuanto a node-oracle, no he tenido tanta suerte. Siguiendo todos los pasos (instalar Python 2.7, MS Visual Studio 2012, Instant Client 12 Basic y SDK, fijar variables de entorno), al instalar con "npm install oracle --msvs-version=2012" da una serie de warnings que asustan, por ejemplo:
..\src\outParam.cpp(37): warning C4244: '=' : conversión de 'double' a 'int'; posible pérdida de datos [C:\temp\mean\prueba2\node_modules\oracle\build\oracle_bindings.vcxproj]
La instalación acaba con unos cuantos warnings, y ningún error, pero al probar el ejemplo del autor, no va. No da error, pero no devuelve nada. De hecho, un simple console.log no funciona en el momento que se hace var oracle = require('oracle'); dentro del javascript.
Un saludo,
Carlos
26/03/2014 16:16
He conseguido que funcione también la parte de Oracle, aunque los warnings de conversión de datos siguen saliendo al instalar. El problema era que en el path tenía otros directorios con otras instalaciones de Oracle, y parece ser que se estaba liando. Dejando únicamente las dos rutas que mencionan las instrucciones de instalación, correspondientes al InstantClient 12, el ejemplo del autor funciona correctamente.
En cualquier caso, menuda movida para hacer que esto funcione, y supongo que no puedo copiar el directorio que contiene el módulo, ya compilado, de mi pc, que es Windows 7 64 bits a un servidor Windows 2003 Server 32 bits, y no lo sé a un Windows 2008 Server 64 bits... Si hay que hacer la compilación e instalar Visual Studio, Python, etc. para ello en cada tipo de servidor, qué rollo.
Un saludo,
Carlos
02/04/2014 04:34
Por otro lado Oracle nunca se ha caracterizado en mi opinión por hacer las cosas fáciles en cuanto a instalación o mantenimiento :P
Me alegro de que hayas podido progresar :)
18/09/2014 11:33
Node.js is not for everything, but it can do a lot of things very good, very fast and is a lot easier to scale than any other tech.
You can learn more on the Barcelona Node.js conference: http://wenode.barcelonajs.org
24/09/2014 17:14
https://cloud.google.com/developers/articles/real-time-gaming-with-node-js-websocket-on-gcp?hl=es-
De la web de Google:
Chrome Experiments es un sitio web creado por Google para mostrar las aplicaciones web creativas que se han creado con las tecnologías HTML5 más recientes. Una de esas aplicaciones web es un juego de laberintos en 3D interactivo llamado World Wide Maze (WWM), desarrollado por el equipo de Chrome en cooperación con colaboradores externos.
Chrome Experiments:
http://www.chromeexperiments.com/
World Wide Maze (WWM):
http://www.chromeexperiments.com/detail/world-wide-maze/
18/10/2014 19:51
Como estais?!
Tengo una duda, soy programador en LAMP, estoy utilizando NODE para una aplicacion escalable, y la verdad me sorprendio , la velocidad y la manera de ser no bloqueante es maravilloso.
Ahora empiezo a pensar en realizar el front end en NODE.
Pero mi pregunta, es la siguiente, (Apenas empiezo a usar node, asi que sed un poco condescendientes conmigo)
En la aplicacion que tengo mediante AJAX le pregunto ala BD si hay cambios, si existen los bajo mediante JSON (simple)
Podria usar un websocket para cuando ocurren cambios en la DB obtener los cambios? Se que wl sebsocket puede hacer eso, de navegador a navegador , como en un demo, que vi,
pero puede tambien EL node.js saber cuando ocurren un cambio nuevo en la BD, como por ejemplo un insert, y avisar a quienes estan viendo esa tabla, por ejemplo??
O estoy planteando algo basado en un error de concepto?
Me explique bien? o quedo un poco liado?
Agradezco cualquier empujoncito
03/11/2014 10:11
Nosotros tuvimos el mismo problema ya que estamos haciendo una web app que notifique en el front cuando se hace una operación en BBDD, para esto utilizamos esta libreria de php http://elephant.io/#usage permite conectar al websocket y enviar una notificación.
03/11/2014 19:51
Saludos.
04/11/2014 08:28
04/11/2014 21:13
Le echare un vistazo!
18/10/2014 20:45
Lo que se me ha ocurrido es crear un mecanismo mediante eventos que me avisen cuando un dato ha cambiado (notificaciones nuevas o que se yo), y luego ver a quién le corresponde recibir dichos cambios mediante un mecanismo centralizado.
21/10/2014 10:00
Es una chorrada para aprender, pero en cuanto esté terminado lo cuelgo en algún server y va a ser mi blog personal.
También recuerdo que hace algún tiempo hice una aplicación web de mensajería instantánea usando Socket.io y node.js e iba de p**a madre.
16/06/2015 11:04
http://www.ideyou.com
04/10/2015 12:33
Voy a empezar a trastear con node ¿Es buena idea usarlo para un sitio de anuncios clasificados como segundamano?
Gracias.
12/02/2016 21:30
"un chat", "una pizarra para escribir", "mostrar tweets en tiempo real", pero de ahi nadie sale.
Creo que es una tecnología muy nueva y los que ya llevan tiempo utilizando aún no encuentran usos concretos y solo la usan por usar, aunque si esta interesante este nuevo modo de programar.
15/02/2016 11:19
24/07/2016 12:39
La web esta en el proveedor de hosting y el node.js esta en un servidor (en un W7) en las instalaciones del cliente, ya que el proveedor de hosting le dijo que no le podia dar ese servicio.
Si ves la pagina, hay tres iframe que presentan el contenido suministrado por el node.js, dandole a la pagina una funcionalidad dinamica, refrescando las consultas sin volver a cargar la pagina, incluso redimensionando el iframe si hace falta (bueno, con chrome crece, pero no lo reduce no sabemos aun porque).
Como puedes ver las consultas son instantaneas, tarda más el navegador en pintar los cambio que la consulta en si.
Elegimo Node.JS por que todo el mundo comentaba que era lo ideal para proyectos en los que habia que soportar muchas conexiones concurrentes, reconozco que nuestros conocimientos en JavaScript eran bastante limitados, pero la curva de aprendizaje ha sido muy corta, realmente lo que mas nos costo es pensar en asincrono, pero una vez que lo tienes claro es brutal.
No tiene una estructura definida, por lo que fuimos cogiendo de aqui y de alla lo que nos parecia más interesante y nos creamos nuestra propia estructura el proyecto.
Con los dispositivos moviles va muy bien, no hemos notao cuellos de botella, aunque aun no esta en distibución ya tenemos la beta funcionando en unos 100 dispositivos, esperamos poder distibuirlo en septiembre.
No lo dudes, es una herramienta increible.