我正在使用nodejs作为Web服务器,该服务器解码GET参数并以某种编码格式返回数据。解码/编码是使用 nodejs 的加密模块完成的,它似乎是同步的。虽然处理单个请求所花费的时间足够快,但阻塞事件循环会使服务在并发时性能不佳。
我的要求很简单,在事件循环之外进行编码/解码功能。
- 单独的进程(child_process或群集)
但由于编码/解码将在子进程中阻塞,这将停止子进程接收新消息,即永远不会有两个字符串被编码为子进程也将是单线程的情况。
- 每个请求的单独线程(threads-a-gogo 或 fiber 或 node-webworker)
为每个请求创建一个单独的线程来执行编码/解码操作,但似乎没有一个模块按预期工作,即threads-a-gogo没有通过npm安装,fiber没有在run()上创建一个单独的线程,node-webworker 不起作用。
是否有人遇到过类似的问题,或者是否有某种方法可以通过简单的消息传递轻松地在nodejs中创建线程。
这是内置于节点的子进程中的。文档在这里:
http://nodejs.org/api/child_process.html#child_process_child_send_message_sendhandle
您还可以使用集群:
http://nodejs.org/api/cluster.html#cluster_cluster_fork_env
使用集群,它将像这样工作:
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);
});
}