📜  Node.js 网络服务器(1)

📅  最后修改于: 2023-12-03 15:17:57.324000             🧑  作者: Mango

Node.js 网络服务器

Node.js 是一个用 JavaScript 编写的、基于事件驱动、非阻塞 I/O 的服务器端 JavaScript 运行环境。通过 Node.js,我们可以使用 JavaScript 编写服务器端代码,实现网络服务器、网站、应用程序和命令行工具等。

基本概念
事件驱动

Node.js 是基于事件驱动的模型来工作的。在 Node.js 中,所有的 I/O 操作都是异步(non-blocking)的,也就是说它们不会阻塞事件循环(Event Loop)。在一个事件完成时,它将触发一个事件回调函数来通知我们这个事件已经完成了。

非阻塞 I/O

在传统的 web 服务器模型中,当一个请求进入服务器时,服务器会将这个请求分配给一个线程去处理。当这个线程在处理请求的时候,所有其他的请求都必须等待这个请求处理完毕才能继续处理。这种模型叫做阻塞 I/O 模型。

相反的,Node.js 使用非阻塞 I/O 的方式来处理请求。Node.js 会将所有的请求都设计成事件,并通过事件驱动的方式来处理这些事件。当请求进入时,Node.js 会将请求转化成一个事件,并将其放入事件队列中等待被处理。当请求处理完毕时,Node.js 会调用相应的事件回调函数,通知我们这个事件已经完成了。

构建网络服务器

Node.js 内置了一个 http 模块,可以帮助我们快速构建网络服务器。

下面是一个简单的 Node.js 网络服务器,它能够监听来自客户端的请求,并将请求内容打印到控制台上:

const http = require('http');

const server = http.createServer((req, res) => {
  console.log(`[${new Date()}] ${req.method} ${req.url}`);
  res.end('Hello world\n');
});

server.listen(3000, () => {
  console.log('Server is listening on port 3000');
});

我们可以使用 curl 命令来模拟一个 HTTP 请求:

$ curl http://localhost:3000/
Hello world

在上面的例子中,我们使用 http.createServer() 方法创建了一个 HTTP 服务器,并监听了端口 3000。当有请求到达时,回调函数将被执行,我们将请求内容打印到控制台,并通过 res.end() 方法向客户端发送响应。

进一步阅读