了不起的Node.js:将JavaScript进行到底(Web开发首选,实时、跨多服务器、高并发)
摘要:
本书由Socket.IO的作者Guillermo Rauch撰写,并由Node社区非常活跃的开发者GoddyZhao翻译。书中通过大量的实践案例展示了如何使用Node.js进行高效的Web开发,包括实时通信、跨多服务器部署以及处理高并发请求。
1. 实时通信
Node.js的一大优势在于其强大的异步I/O处理能力,这使得它非常适合构建实时应用。Socket.IO是一个流行的库,可以轻松地实现WebSocket通信。
示例代码:
// 安装Socket.IO
const io = require('socket.io')(3000);
io.on('connection', (socket) => {
    console.log('A user connected');
    socket.on('chat message', (msg) => {
        io.emit('chat message', msg);
    });
    socket.on('disconnect', () => {
        console.log('User disconnected');
    });
});
在这个例子中,我们创建了一个Socket.IO服务器监听3000端口。当客户端连接时,服务器会打印一条消息。当接收到chat message事件时,服务器会将消息广播给所有连接的客户端。
2. 跨多服务器部署
Node.js可以通过集群模式来实现跨多服务器部署,从而提高应用的可用性和性能。
示例代码:
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
    // Fork workers.
    for (let i = 0; i < numCPUs; i++) {
        cluster.fork();
    }
    cluster.on('exit', (worker, code, signal) => {
        console.log(`Worker ${worker.process.pid} died`);
    });
} else {
    // Workers can share any TCP connection
    // In this case it is an HTTP server
    http.createServer((req, res) => {
        res.writeHead(200);
        res.end('hello world\n');
    }).listen(8000);
}
在这个例子中,我们首先检查当前进程是否为Master进程。如果是,就根据CPU数量fork出多个Worker进程。每个Worker进程都会启动一个HTTP服务器,监听8000端口。
3. 高并发处理
Node.js的非阻塞I/O模型使其能够高效地处理大量并发请求。通过使用异步函数和回调,Node.js可以在不阻塞主线程的情况下处理多个请求。
示例代码:
const http = require('http');
const server = http.createServer((req, res) => {
    setTimeout(() => {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end('Hello World\n');
    }, 1000); // 模拟长时间处理任务
});
server.listen(3000, () => {
    console.log('Server running at http://localhost:3000/');
});
在这个例子中,我们创建了一个HTTP服务器。即使处理任务需要1秒的时间,Node.js仍然可以处理其他请求,因为这些任务是非阻塞的。
通过这些示例代码,我们可以看到Node.js的强大之处。无论是在实时通信、跨多服务器部署还是高并发处理方面,Node.js都提供了简单而有效的解决方案。希望本书能够帮助你更好地理解和利用Node.js的强大功能。