45 votos

¿Cuál es la diferencia entre dnode y nowjs?

¿Cómo se comparan los dos uno al otro?

61voto

andref Puntos 3297

TL;DR

DNode

  • proporciona RMI;
  • funciones de control remoto puede aceptar devoluciones de llamada como argumentos;
  • lo cual es bueno, ya que es totalmente asincrónico;
  • se ejecuta de modo independiente o a través de un servidor http existente;
  • puede que el navegador y el Nodo clientes;
  • soporta middleware, como connect;
  • ha sido de alrededor de más de NowJS.

NowJS

  • va más allá de la RMI y se implementa un "ámbito compartido" de la API. Es como Dropbox, sólo con las variables y funciones en lugar de los archivos;
  • funciones de control remoto también se aceptan devoluciones de llamada (gracias a Sridatta y Eric de NowJS para la aclaración);
  • depende de la escucha del servidor http para trabajar;
  • sólo pueden tener los clientes de explorador;
  • se hizo público hace muy poco;
  • es un poco buggy ahora.

Conclusión

NowJS es más que un juguete ahora, pero mantener un reloj a medida que madura. Para cosas serias, tal vez ir con DNode. Para un examen más detallado de estos bibliotecas, leer a lo largo.

DNode

DNode proporciona una Invocación de Método Remoto marco. El cliente y el servidor pueden exponer las funciones de uno a otro.

// On the server

var server = DNode(function () {
    this.echo = function (message) {
        console.log(message)
    }
}).listen(9999)

// On the client

dnode.connect(9999, function (server) {
    server.echo('Hello, world!')
})

La función que se pasa a DNode() es un controlador que no se diferencia de la aprobada para http.createServer. Tiene dos parámetros: client puede ser utilizado para acceder a la funciones exportadas por el cliente y connection puede ser utilizado para manejar relacionados con la conexión de eventos:

// On the server

var server = DNode(function (client, connection) {
    this.echo = function (message) {
        console.log(message)
        connection.on('end', function () {
            console.log('The connection %s ended.', conn.id)
        })
    }       
}).listen(9999)

La exportado métodos puede pasar cualquier cosa, incluyendo las funciones. Son correctamente envuelto como apoderados por DNode y puede ser llamado de nuevo en el otro extremo. Este es fundamental: DNode es totalmente asincrónica; no bloque, mientras que espera para un método remoto para regresar:

// A contrived example, of course.
// On the server

var server = DNode(function (client) {
    this.echo = function (message) {
        console.log(message)
        return 'Hello you too.'
    }
}).listen(9999)

// On the client

dnode.connect(9999, function (server) {
    var ret = server.echo('Hello, world!')
    console.log(ret) // This won't work
})

Las devoluciones de llamada debe ser pasado en el fin de recibir las respuestas de los otros punto final. Complicado conversaciones pueden llegar a ser ilegibles bastante rápido. Este la pregunta se analizan las posibles soluciones para este problema.

// On the server

var server = DNode(function (client, callback) {
    this.echo = function (message, callback) {
        console.log(message)
        callback('Hello you too.')
    }

    this.hello = function (callback) {
        callback('Hello, world!')
    }
}).listen(9999)

// On the client

dnode.connect(9999, function (server) {
    server.echo("I can't have enough nesting with DNode!", function (response) {
        console.log(response)
        server.hello(function (greeting) {
            console.log(greeting)
        })
    })
})

El DNode cliente puede ser una secuencia de comandos que se ejecuta dentro de un Nodo de la instancia o puede ser incrustado en una página web. En este caso, sólo se conecte al servidor que sirvió a la página web. Conectar es de gran ayuda en este caso. Este escenario se ha probado con todos los navegadores modernos y con Internet Explorer 5.5 y 7.

DNode se inició hace menos de un año, en junio de 2010. Es tan maduro como un Nodo la biblioteca puede ser. En mis pruebas, he encontrado ninguna de las cuestiones obvias.

NowJS

NowJS proporciona una especie de magia de la API que está al borde de ser lindo. El servidor tiene una everyone.now alcance. Todo lo que se pone dentro de everyone.now se convierte en visible a cada cliente a través de su now alcance.

Este código, en el servidor, compartirán una echo función con cada cliente que escribe un mensaje en la consola del servidor:

// Server-side:

everyone.now.echo = function (message) {
    console.log(message)
}

// So, on the client, one can write:

now.echo('This will be printed on the server console.')

Cuando un server-side "compartir" la función se ejecuta, this tendrá un nowde atributo que es específico para el cliente que realizó la llamada.

// Client-side

now.receiveResponse = function (response) {
    console.log('The server said: %s')
}

// We just touched "now" above and it must be synchronized 
// with the server. Will things happen as we expect? Since 
// the code is not multithreaded and NowJS talks through TCP,
// the synchronizing message will get to the server first.
// I still feel nervous about it, though.

now.echo('This will be printed on the server console.')

// Server-side:

everyone.now.echo = function (message) {
    console.log(message)
    this.now.receiveResponse('Thank you for using the "echo" service.')
}

Funciones en NowJS pueden tener valores de retorno. Para llegar a ellos, una devolución de llamada debe ser pasado:

// On the client

now.twice(10, function (r) { console.log(r) }

// On the server

everyone.now.twice = function(n) {
    return 2 * n
}

Esto tiene una implicación si desea pasar una devolución de llamada como un argumento honesto (no para recoger un valor de retorno) -- uno siempre debe pasar el valor de retorno colector, o NowJS pueden confundirse. Según los desarrolladores, esta forma de recuperar el valor de retorno con una implícita de devolución de llamada probable que cambie en el futuro:

// On the client

now.crunchSomeNumbers('compute-primes', 

    /* This will be called when our prime numbers are ready to be used. */

    function (data) { /* process the data */ }, 

    /* This will be called when the server function returns. Even if we
    didn't care about our place in the queue, we'd have to add at least
    an empty function. */

    function (queueLength) { alert('You are number ' + queueLength + ' on the queue.') }
)

// On the server

everyone.now.crunchSomeNumbers = function(task, dataCallback) {
    superComputer.enqueueTask(task, dataCallback)
    return superComputer.queueLength
}

Y esto es para el NowJS de la API. Bueno, en realidad hay 3 más funciones que puede ser utilizado para detectar el cliente de conexión y desconexión. No sé por qué no exponer estas características utilizando EventEmitter, aunque.

A diferencia de DNode, NowJS requiere que el cliente sea un script que se ejecuta dentro de un navegador web. La página que contiene la secuencia de comandos debe ser servido por el mismo Nodo que se está ejecutando el servidor.

En el lado del servidor, NowJS también las necesidades de un servidor http de escucha. Debe ser aprobada cuando se inicializa NowJS:

var server = http.createServer(function (req, response) {
    fs.readFile(__dirname + '/now-client.html', function (err, data) {
        response.writeHead(200, {'Content-Type':'text/html'})  
        response.write(data)
        response.end()
    })
})
server.listen(8080)
var everyone = now.initialize(server)

NowJS primer commit es de hace un par de semanas (marzo 2011). Como tal, le espera para buggy. He encontrado problemas de mí mientras escribo esta respuesta. También esperan que sus API para cambiar mucho.

En el lado positivo, los desarrolladores están muy accesibles -- Eric incluso me guió para hacer las devoluciones de llamada de trabajo. El código fuente no está documentado, pero afortunadamente simple y corto y el manual de usuario y ejemplos son suficientes para comenzar.

14voto

NowJS miembro del equipo de aquí. La corrección de andref la respuesta:

NowJS apoya plenamente "Invocación de Método Remoto". Usted puede pasar funciones como argumentos en las llamadas remotas y usted puede tener funciones como valores de retorno así.

Estas funciones están envueltos por NowJS tal y como son en DNode de modo que se ejecuten en la máquina en la cual la función fue definida. Esto hace que sea fácil para exponer nuevas funciones en el extremo remoto, al igual que en DNode.

P. S. Además, no sé si andref implica que las llamadas remotas son sólo asincrónica en DNode. Remoto de llamadas asincrónicas en NowJS. No bloque de código.

2voto

Juzer Ali Puntos 1589

No lo he probado Dnode así que mi respuesta no es una comparación. Pero me gustaría plantear algunas experiencias en el uso de nowjs.

Nowjs se basa en el zócalo.io que es bastante buggy. Yo frecuentemente los tiempos de espera de sesión, se desconecta y now.ready evento de disparo varias veces en un corto periodo de tiempo. Echa un vistazo a esta cuestión en nowjs página de github.

También me encontré con el uso de websockets inviable en algunas plataformas, sin embargo, esto puede evitarse de forma explícita que la desactivación de websockets.

Yo había planeado la creación de una aplicación para producción mediante nowjs pero parece que no es lo suficientemente maduros como para ser tomadas en consideración. Voy a tratar de dnode si sirve a mi propósito, de lo contrario voy a cambiar a la llanura de edad express.

Actualización:

Nowjs parece ser desguazado. No comete desde hace 8 meses.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X