nodejs中的在线阶乘程序

时间:2013-04-30 13:07:45

标签: ajax node.js socket.io

我想编写一个nodejs程序来计算所有小于30的数字的阶乘,这在新程序员中很受欢迎。

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

但这次我希望nodejs在客户端的Web浏览器上在线打印输出。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

Heroku上的这篇文章将引导您完成Building a Real-time, Polyglot Application with Node.js, Ruby, MongoDB and 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);
    });
});

Herec9.io上的完整项目。