Node.js 中存在的服务器类型2025年2月21日 | 11 分钟阅读 在 Node.js 中,不同类型的服务器使用不同的模块和包创建。其中一些是 HTTP 服务器、WebSocket 服务器、TCP 服务器、UDP 服务器和 GraphQL 服务器等。这些服务器用于不同的通信模式。服务器的选择取决于应用程序的性能、通信类型、传输需求和应用程序的性质。在本文中,我们将讨论 Node.js 中存在的不同类型的服务器。 使用超文本传输协议创建服务器HTTP 服务器用于客户端和服务器之间的数据通信。客户端可以是 Web 浏览器或移动应用程序。请求发送到服务器,服务器处理请求并将响应发送回客户端。HTTP 是无状态的,这意味着它独立于请求。它还可以管理状态、cookie、会话、令牌等。 这种服务器的一些优点是其普遍兼容性、缓存机制、健壮的生态系统以及处理请求的可伸缩性,一些缺点是无状态性质、HTTP 头部造成的开销、与跨站点脚本相关的安全问题以及有限的协议功能。 示例让我们以一个程序来说明 Node.js 中的 HTTP 服务器。 运行程序的步骤
说明该 JavaScript 程序首先导入 Node.js 中的内置模块 'http'。使用 'CreateServer' 方法创建 HTTP 服务器实例,该方法接受回调函数,并将请求和响应作为 HTTP 请求的参数。现在,使用一个 GET 请求处理函数来处理传入的 GET 请求。如果传入的请求是 'GET',它会发送一个包含成功消息和成功代码的响应。否则,它会发送一个包含错误消息和“未实现”代码 501 的响应。为了启动服务器,使用 listen() 方法,该方法将使服务器在 localhost 端口 3000 上侦听。 创建 Https 服务器Https 服务器的操作方式与 HTTP 相同,但它增加了一层加密。在这里,客户端请求 Https 服务器通过安全握手开始通信。服务器将向客户端发送 SSL/TLS 证书,然后客户端验证密钥和证书。之后,请求和响应在客户端和服务器之间交换。 一些优点是安全的通信通道、用户认证和改进的搜索引擎。一些缺点是实现 HTTPS 请求的管理开销以及服务器处理时间的增加。 示例让我们以一个程序来说明 Node.js 中的 Https 服务器。 运行程序的步骤
说明该程序首先导入模块,并创建一个包含 HTTPS 服务器的选项对象。这里,'key' 同步读取私钥文件,'cert' 将同步读取此 'fs' 模块的 SSL 证书文件。之后,使用 CreateServer() 方法创建 HTTPS 服务器实例。它有两个选项,key 和 cert,并且有一个带有请求和响应作为参数的回调函数。如果响应代码成功(即 200),它会发送成功消息。listen() 方法用于启动 HTTPS 服务器。它有一个回调函数来记录指示服务器是否正在运行的消息。 1. Web 套接字WebSocket 服务器用于在单个 TCP 连接上进行客户端和服务器之间的双向通信。最初,客户端向服务器发送一个 HTTP 请求,这被称为握手请求,然后服务器将响应一个升级响应。当升级成功时,连接从 HTTP 协议变为 WebSocket 协议。现在,客户端和服务器可以异步通信,数据以帧的形式传输。为了保持完整性,客户端和服务器使用 ping 和 pong 帧交换心跳消息。 WebSocket 服务器的几个优点包括它们在实时交互中的使用、效率的提高以及对全双工通信的支持。一些缺点是复杂性增加、防火墙问题和有状态连接。 服务器端程序客户端程序输出 ![]() 运行程序的步骤
WebSocket 服务器解释首先,导入 'ws' 模块,其中包含支持套接字之间通信的方法。给定端口号并使用 'WebSocket' 服务器创建 WebSocket 实例。 现在,使用 'on' 方法连接套接字。它侦听新连接。当新客户端连接到 WebSocket 服务器时,此事件侦听器将触发。之后,它向连接的客户端发送 hello 消息。事件处理程序 ws.On(),另一个事件侦听器将设置为侦听来自客户端的传入消息。当服务器收到来自客户端的消息时,它将触发。message 参数包含客户端发送的消息内容。另一个事件处理程序将设置事件侦听器,当客户端断开连接时触发。它的回调函数将记录消息“客户端”已断开连接。 'readline.createInterface()' 函数将设置一个接口以从命令行读取输入。之后,接口的一个实例是 'rl'。设置了一个事件侦听器来侦听来自命令的输入。当客户端套接字打开时,它开始从用户获取输入并向客户端发送消息。 WebSocket 客户端解释WebSocket 客户端服务器首先导入 'ws' 模块,并使用 'WebSocket' 方法创建一个新的 WebSocket 实例,其中端口分配给服务器。它将连接到在同一端口上运行的服务器。事件处理程序 'ws.on('open', ...)' 侦听套接字连接。当连接打开时,它会记录一条消息,说明服务器已连接。'ws.on('message', ...)' 将侦听来自服务器的消息,并记录收到的消息,然后 'ws.on('close', ...)' 将侦听并在服务器连接时触发。 2. 创建 REST API 服务器Rest API 代表表述性状态传输应用程序编程接口。它使用 REST 架构的原则,该架构基于由唯一 URL 标识的资源。它包含 HTTP 方法,如 GET、POST、PUT、PATCH 和 DELETE。GET 请求用于检索数据,POST 方法用于创建新数据。PUT 或 PATCH 方法用于更新数据,DELETE 方法用于删除数据。 REST API 的一些优点是可伸缩性、简单性、灵活性和平台独立性。这些服务器的缺点之一是关系的复杂性。有时,客户端可能会收到比所需数据更多或更少的数据,这称为过度获取和不足获取。版本控制也被认为是 REST API 的一个缺点。 创建 REST API 服务器的 JavaScript 程序输出 ![]() 运行程序的步骤
说明在此示例中,使用 'require' 函数导入包以加载模块。之后,为 express 创建一个实例,由 'app' 表示。使用 body-parser 作为中间件来解析 Json 请求体。现在,定义了一些用于 get、post、put 和 delete 的路由处理程序。 当客户端向 'https://:3000/api/users' 发出 GET 请求时,express.js 侦听传入请求。如果它们与此路由匹配,它将调用一个回调函数,该函数接受两个参数:请求和响应。服务器将向用户数组发送响应。 当客户端向 'https://:300/api/users/:id' 发出 GET 请求时,'req.params.id' 用于从 URL 中提取 ID 参数。之后,它搜索具有给定 ID 的用户。如果用户存在,服务器将发送用户的名称作为响应;否则,它将发送一个错误消息,状态码为 401。 当客户端发出 PUT 请求时,服务器提取 ID 并使用新用户更新用户。如果未找到用户,则发送状态码为 401 的错误消息。同样,POST 请求将用户添加到用户数组中,DELETE 请求通过其 ID 删除用户。 3. 使用 dgram 创建服务器使用 'dgram' 模块创建的服务器是无连接且轻量级的。它们在数据传输方面非常快速和高效。最初,创建套接字,然后它处理传入消息并对其进行响应。 效率和低延迟是其优点之一。它支持多个套接字和广播。一些缺点是不可靠的传输、无序保证和有限的用例。 它们用于实时应用程序和物联网设备网络。域名系统使用 UDP 进行查询和响应消息。它还用于网络监控和管理。 服务器端程序客户端程序输出 ![]() 运行程序的步骤
UDP 服务器程序解释导入 'dgram' 模块,它是 Node.js 中的内置模块,包含用于处理用户数据报协议的方法。之后,将使用 IPv4 创建 UDP 套接字。这里的 'udp4' 表示 IPv4,'udp6' 表示 IPv6。 现在,当服务器收到来自客户端的消息时,会触发一个事件侦听器。它包含一个带有 'msg' 和 'rinfo' 参数的回调函数。'msg' 表示客户端发送的消息,'rinfo' 包含有关发送者的一些信息,例如发送者的端口和地址。 现在,服务器将使用 send 方法向客户端发送响应。它有消息、客户端端口和客户端地址,并且回调函数有参数。回调函数将处理错误并记录消息。 on 方法启动服务器侦听。bind 方法将服务器绑定到给定端口。 UDP 客户端程序解释此程序还导入 'dgram' 模块,并使用 IPv4 的 'CreateSocket' 方法创建客户端实例。 Buffer.from 方法创建一个缓冲区,其中包含要发送到服务器以与其连接的消息。之后,send 方法将消息发送到在给定端口和给定 IP 地址上侦听的服务器。客户端可以使用 close 方法关闭连接。 |
我们请求您订阅我们的新闻通讯以获取最新更新。