如何在 NestJS 服务/控制器上使用套接字网关?

Rin*_*ieR 7 design-patterns websocket node.js socket.io nestjs

我正在开发一个 NestJS 整体应用程序,在不久的将来,我们会将其分解为微服务,但现在一切都在同一个项目上。

我有一些用于数据库增删改查操作的 REST API,现在,我正在开发一项新功能,该功能将通过 websocket 连接从前端接收有效负载,然后在特定服务器上调用一些方法。

现在,我是套接字的新手,也是 Nest 的初学者,所以这可能是一个明显而愚蠢的问题

我正在关注 Nest 的文档:https://docs.nestjs.com/websockets/gateways,但我不确定如何将其中的一些应用到现实生活中的应用程序中。我socket.gateway.ts有一个handleConnection方法sendMessage,但我需要一些关于监听新事件的建议。现在,我接收消息的唯一方法是使用类@SubscribeMessage中的方法.gateway.ts。但这样一来,我的网关必须注入需要接收套接字连接有效负载的每个服务,因此我需要在网关内为每个“操作”使用一个新方法,就像我在控制器上使用 REST 端点一样。

所以,这是我的问题:

  1. 遵循最佳实践,我应该如何在其他服务中接收事件负载?我应该将网关视为“某种”控制器吗?就像我需要接收有效负载的每个“端点”(事件)的方法一样?
  2. 如果问题一是正确的,我是否应该为每个服务都有一个新的网关(例如 UserService 的 1 个网关,AppService 的另一个网关,MessageService 的另一个网关,就像控制器一样)?
  3. 另外,作为一个额外的问题...我的后端 URL 是https://example.com/service-name/example,该地址无法通过我的前端调用...它尝试访问 example.com,而不是完整的 URL ,我缺少什么?

另外:我并没有坚持使用 Nest socket.io lib,我可以使用另一个库,但我确实更喜欢继续使用 Nest 的本机库,因为这不仅仅是我的决定,所以......

编辑:我意识到我关于“不同服务”的问题实际上可能更好地解释为“不同域”。