2012-05-30 12 views
5

Estoy utilizando nodejs para un servidor web que decodifica los parámetros GET y devuelve datos en algún formato codificado. La decodificación/codificación se realiza utilizando el módulo criptográfico de nodejs, que parece ser sincrónico. Si bien el tiempo necesario para atender una sola solicitud es lo suficientemente rápido, el bloqueo del ciclo de eventos ha hecho que el servicio tenga un rendimiento bajo con la concurrencia.Formas de implementar tareas vinculadas a la CPU en nodejs

Mi requisito es simple, realice la función de codificación/descodificación fuera del bucle de evento.

  1. Proceso independiente (child_process o clúster)

Esto puede ser o bien un proceso separado exclusivamente para este propósito, pero ya que la codificación/decodificación se bloquea en el proceso hijo Esto detendrá el proceso hijo para recibir nuevos mensajes, es decir, nunca habrá una situación en la que dos cadenas estén codificadas, ya que el proceso hijo también tendrá un único subproceso.

  1. hilo separado para cada solicitud (hilos-a-gogo o fibra o nodo-Webworker)

crear un hilo separado para cada solicitud para llevar a cabo la operación de codificación/decodificación, pero ninguno de los los módulos parecen funcionar como se esperaba, es decir, threads-a-gogo no se instala a través de npm, fiber no creó un hilo separado en run(), node-webworker not working.

¿Alguien ha enfrentado un problema similar o hay alguna manera de crear fácilmente subprocesos en nodejs con simple paso de mensajes?

+0

La respuesta está en # 1 que necesita para convertir su bloqueo/espera activa en un estilo de evento pasivo – ControlAltDel

+0

Creo que las tareas y el nodo vinculados a la CPU no son una buena opción. Entonces, es mejor usar Java, por ejemplo, y permitir que node/java se comuniquen entre sí de manera efectiva. – Alfred

+0

Entiendo que las tareas vinculadas a la CPU en nodejs son terribles, por lo tanto, esperaba que el módulo criptográfico integrado lo manejara por separado. ¿Pero no hay otra opción que retransmitir en Java/C? – mdprasadeng

Respuesta

1

Esto está integrado en los procesos hijo del nodo. Docs aquí:

http://nodejs.org/api/child_process.html#child_process_child_send_message_sendhandle

También es posible usar clúster:

http://nodejs.org/api/cluster.html#cluster_cluster_fork_env

con el racimo, que trabajarían algo como:

if (cluster.isMaster) { 
    var worker = cluster.fork(); 
    worker.send('encodeThisString'); 

} else if (cluster.isWorker) { 
    process.on('message', function(msg) { 
    var encrypted = crypto.doSomeEncryption(msg); 
    process.send(encrypted); 
    }); 
} 
Cuestiones relacionadas