0

新しいプログラマーの間で非常に人気のある、30 未満のすべての数値の階乗を計算する nodejs プログラムを作成したいと考えています。

fact(0) = 1
fact(i) = i*fact(i-1)

しかし今回は、nodejs が出力をクライアントの Web ブラウザーでオンラインで印刷するようにします。

階乗のコードの書き方は知っていますが、新しい階乗数が計算されるたびにクライアント ビューを更新する方法がわかりません。

4

1 に答える 1

2

まず、プロセッサを集中的に使用するタスクは、他のプロセスで実行する必要があります。これは、ノードの HTTP サーバーでこれを行うと、メイン イベント ループがブロックされるためです。

他のプロセスで計算を行い、結果を標準ストリーム、ソケット、データベースなどを介してnode.jsサーバー プロセスに転送できます。

私の個人的な意見では、node.jsはそのような計算を行うための適切なツールではありません (少数の場合は機能する可能性があると確信しています)。

Herokuに関するこの記事では、Node.js、Ruby、MongoDB、およびSocket.IOを使用したリアルタイムの Polyglot アプリケーションの構築について説明します。


> I just want to know how to show my output to the client whenever something happens:

これをsocket.ioで行うには、最初にインストールする必要があります。

npm install socket.io

次に、ノード アプリケーションで次のようにします。

この例では、間隔を置いてメッセージをクライアントにプッシュしていることに注意してください。

var http = require('http'),
    io;

var html = "<!doctype html>" +
    "<title>Socket.IO Example</title>" +
    "<div id=\"number\"></div>" +
    "<script src=\"/socket.io/socket.io.js\"></script>" +
    "<script>" +
    "var socket = io.connect()," +
    "numberElement = document.getElementById('number');" +
    "socket.on('message', function (data) {" +
    //"numberElement.innerText = data;" +
    "numberElement.innerHTML = data;" +
    "});" +
    "</script>";

var server = http.createServer(function (request, response) {
    response.statusCode = 200;
    response.setHeader('Content-Type', 'text/html');
    response.end(html);
});

server.listen(8080);

io = require('socket.io').listen(server);

function push(socket) {
    var i = 0;
    return function () {
        socket.send(String(i++ % 3600));
    };
}

io.sockets.on('connection', function (socket) {
    var interval = setInterval(push(socket), 1000);
    socket.on('disconnect', function () {
        clearInterval(interval);
    });
});

c9.ioの完全なプロジェクトは次のとおりです。

于 2013-04-30T13:11:39.890 に答える