4

我有一个(愚蠢的)node.js 服务器,它的唯一目的是在每个请求传递的数据上调用一个函数并回答该函数的结果。这是我使用的代码:

var pageDown = require('./PageDown/Markdown.Sanitizer').getSanitizingConverter(),
 http = require('http');

http.createServer(function (req, res) {
  var data = "";
  res.writeHead(200, {'Content-Type': 'text/plain'});
  req.on('data', function (chunk) {
    data += chunk;
  });
  req.on('end', function() {
    res.end(pageDown.makeHtml(data));
  });
}).listen(1337, '127.0.0.1');
console.log('HServer running at http://127.0.0.1:1337/');

我使用 python 中的这个服务器和以下代码(atm 我只是在进行基准测试,所以它只是一个压力测试):

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests

for i in range(1, 100000):
    r = requests.post('http://localhost:1337/', data="lol")
    print i
print "I'm done :')"

我的问题是这种完成工作的方式很慢。我有一个需要用这个 javascript 函数处理的大型数据库,我正在寻找使上述过程更快的方法。所以欢迎提出建议!

4

2 回答 2

4

您没有使用 node.js 的异步设计。事实上,恕我直言,您正在做的是反模式。

如果您必须在 node.js 中进行计算,那么服务器代码是正确的。但是要利用异步架构,您应该将许多 node.js 服务器实例放在负载均衡器后面。您甚至可以在一台机器上运行此实例以利用多个内核。

为了使客户能够从这么多实例中获利,您也应该异步进行 post 调用。要做到这一点,而不是请求使用一些异步 http 客户端,如http://www.tornadoweb.org/documentation/httpclient.html

它允许您在 node.js 实例中并行进行计算。

于 2012-09-20T18:11:15.193 回答
2

如果您所做的只是调用节点进程来清理您的 HTML,那么为什么不在 python 中这样做呢?我假设您指向的降价转换器是这个:http ://code.google.com/p/pagedown/source/browse/Markdown.Sanitizer.js 。如果是这样,为什么不将其转换为 python(或找到类似的 python 代码),并在处理过程中使用它。进行网络调用以简单地运行此过程似乎很疯狂,因为它比仅在 python 中执行所有操作要慢得多。以下是我能够找到的一些 python 降价工具:http ://packages.python.org/Markdown/,https : //github.com/trentm/python-markdown2

于 2012-09-20T17:31:27.493 回答