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サーバーの多くのインスタンスをロードバランサーの背後に配置する必要があります。このインスタンスを1台のマシンで実行して、複数のコアを利用することもできます。

そして、クライアントがその多くのインスタンスから利益を得ることができるようにするには、ポストコールも非同期で行う必要があります。リクエストの代わりにそれを行うには、http ://www.tornadoweb.org/documentation/httpclient.htmlのような非同期httpクライアントを使用します

これにより、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 に答える