我想编写一个 nodejs 程序来计算小于 30 的所有数字的阶乘,这在新程序员中非常流行。
fact(0) = 1
fact(i) = i*fact(i-1)
但是这次我想让nodejs在客户端的网络浏览器上在线打印输出。
我知道如何编写阶乘代码,但我不知道在计算新的阶乘数时如何更新客户端视图。
首先,处理器密集型任务应该在其他进程上完成。那是因为在你的节点 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);
});
});