NestJS 中的 WebSockets 提供了一个框架,用于构建具有客户端和服务器之间双向通信的实时应用程序。本文档解释了 WebSockets 在 NestJS 中的实现和使用方式,包括网关、消息处理、适配器以及与 NestJS 其他功能的集成。
有关服务器发送事件(一种不同的实时通信方法)的信息,请参阅 服务器发送事件 (SSE)。
NestJS 通过 @nestjs/websockets 包提供 WebSocket 支持,该包与核心框架集成。它同时为 Socket.IO 和原生 WebSockets 提供了适配器。
@nestjs/platform-socket.io:与 Socket.IO 集成@nestjs/platform-ws:与原生 WebSockets 集成(通过 ws 包)WebSockets 模块是 NestJS 中的一个可选组件,正如核心 package.json 中所指出的,其中 @nestjs/websockets 被列为一个可选的对等依赖。
NestJS WebSockets 架构
来源
WebSocket 网关是使用 @WebSocketGateway() 装饰器注解的类。它们的工作方式与控制器类似,但专为 WebSocket 通信而设计。消息处理程序是网关内使用 @SubscribeMessage() 装饰的方法,用于响应特定事件。
网关结构和消息处理
消息处理程序可以返回不同类型的响应
void - 不向客户端发送任何内容Observable<WsResponse> - 允许发送具有不同事件名称的多个响应来源
当收到 WebSocket 事件时,它会经历一个与 HTTP 请求类似的 Pipelined 处理流程。 WsContextCreator 类负责为消息处理程序创建执行上下文,包括设置守卫 (guards)、管道 (pipes) 和拦截器 (interceptors)。
WebSocket 消息处理管道
WebSocket 消息的上下文创建过程由 WsContextCreator 类处理,它遵循以下关键步骤:
此 Pipelined 流程确保 WebSocket 消息处理遵循与 NestJS 中的 HTTP 请求处理相同的模式,并具有适当的上下文类型和元数据。
来源
NestJS 提供了两种主要的 WebSocket 适配器:
WebSocket 适配器架构
适配器负责:
来源
WebSocket 异常使用 WsException 类进行处理,并通过专用的异常处理机制进行处理。 WsProxy 类包装消息处理程序的执行,以捕获和处理异常。
WebSocket 异常处理流程
错误处理机制在 WsProxy 类中实现,该类:
来源
NestJS 中的 WebSockets 通过上下文创建器与核心框架功能集成,这些上下文创建器为 WebSocket 事件建立执行 Pipelined。
与 RouterExecutionContext 为 HTTP 请求和 RpcContextCreator 为微服务设置执行上下文类似,WsContextCreator 类为 WebSocket 消息设置执行上下文。这些上下文创建器共享相似的模式,但针对其特定的通信协议进行了调整。
WebSockets 与 NestJS 核心的集成
WebSocket 上下文创建遵循以下步骤:
这些步骤确保 WebSocket 消息处理与 HTTP 请求处理具有相同的功能。
来源
WebSockets 支持参数提取和转换,这与 HTTP 控制器类似。 WsParamsFactory 负责根据参数装饰器从 WebSocket 事件中提取值。
参数处理包括:
参数提取遵循与 HTTP 请求和微服务相同的模式,并具有适当的上下文类型和元数据。
来源
NestJS 中的 WebSockets 提供了一个全面的实时通信框架,该框架与 NestJS 生态系统的其余部分无缝集成。其实现遵循 NestJS 其余部分相同的架构模式,使其使用起来一致且直观。
主要组成部分包括:
该架构旨在模块化和可扩展,允许开发人员在 Socket.IO 或原生 WebSockets 等不同的 WebSocket 实现之间进行选择,同时保持一致的编程模型。
相关主题
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(86eb46)