新しいプログラマーの間で非常に人気のある、30 未満のすべての数値の階乗を計算する nodejs プログラムを作成したいと考えています。
fact(0) = 1
fact(i) = i*fact(i-1)
しかし今回は、nodejs が出力をクライアントの Web ブラウザーでオンラインで印刷するようにします。
階乗のコードの書き方は知っていますが、新しい階乗数が計算されるたびにクライアント ビューを更新する方法がわかりません。
まず、プロセッサを集中的に使用するタスクは、他のプロセスで実行する必要があります。これは、ノードの 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);
});
});