我有一个(愚蠢的)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函数进行处理,我正在寻找方法使上述过程更快。所以欢迎提出建议!
答案 0 :(得分:4)
您没有使用node.js的异步设计。事实上你在做恕我直言是反模式。
如果您必须在node.js中进行计算,那么服务器代码是正确的。但是要利用异步架构您应该将许多node.js服务器实例放在负载均衡器之后。您甚至可以在一台计算机上运行此实例以使用多个核心。
并且要让客户从这么多实例中获利,您也应该异步进行发布调用。要执行此操作而不是请求,请使用某些异步http客户端,例如http://www.tornadoweb.org/documentation/httpclient.html
它允许您并行地在node.js实例中进行计算。
答案 1 :(得分:2)
如果您正在调用节点进程来清理HTML,为什么不在python中执行此操作?我假设您指向的降价转换器就是这个:http://code.google.com/p/pagedown/source/browse/Markdown.Sanitizer.js。如果是这种情况,为什么不将它转换为python(或找到类似的python代码),并在进程中使用它。通过简单地运行这个过程来进行网络调用似乎很疯狂,因为它比在python中完成所有操作要慢得多。以下是我能找到的一些python markdown工具:http://packages.python.org/Markdown/,https://github.com/trentm/python-markdown2。