我想编写一个nodejs程序来计算所有小于30的数字的阶乘,这在新程序员中很受欢迎。
fact(0) = 1
fact(i) = i*fact(i-1)
但这次我希望nodejs在客户端的Web浏览器上在线打印输出。
我知道如何为factorial编写代码,但我不知道在计算新的阶乘数时如何更新客户端视图。
答案 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);
});
});