0

我想编写一个 nodejs 程序来计算小于 30 的所有数字的阶乘,这在新程序员中非常流行。

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

但是这次我想让nodejs在客户端的网络浏览器上在线打印输出。

我知道如何编写阶乘代码,但我不知道在计算新的阶乘数时如何更新客户端视图。

4

1 回答 1

2

首先,处理器密集型任务应该在其他进程上完成。那是因为在你的节点 HTTP 服务器中这样做会阻塞主事件循环!

您可以对其他进程进行计算,并通过标准流、套接字、数据库等将结果传输到您的node.js服务器进程。

我个人的看法是,node.js不是进行此类计算的正确工具(我确信它可能适用于小数字)

这篇关于Heroku的文章将引导您使用 Node.js、Ruby、MongoDB 和 Socket.IO 构建一个实时的多语言应用程序


> 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 回答