REST API 聊天 - 实时获取消息的端点

Kos*_*ika 5 api rest chat websocket node.js

我有一个由express+mongodb 提供支持的REST API 服务器。有几个具有不同资源的端点。其中之一是聊天 API。我已经有几个基本端点,例如:

  • POST http://api.example.com/v1/chat- 创建聊天
  • POST http://api.example.com/v1/chat/:id/message- 向现有聊天发送消息
  • GET http://api.example.com/v1/chat/:id/messages- 获取指定聊天中的消息

但我需要为 API 消费者提供一种方法,使其能够高效地实时获取新消息,而无需重新加载页面。

目前,如您所见,可以仅从GET客户端轮询端点,但它似乎性能不佳。例如,客户端可以有 UI,它将在标头中显示新消息计数(某种通知)

我正在考虑网络套接字。例如,是否可以提供端点,例如/chat/:id/subscribe代理套接字服务器并在客户端上连接到它?

是否有一些此类 API 设计的好例子可供我从中获得灵感,或者您可以给我一些建议吗?谢谢!

Ale*_*exB 3

socket.io是您正在寻找的包。

其文档中的命名空间部分是一个很好的解决方案,因为命名空间可以受到授权保护它代表一个已连接的套接字池。

我将这样做:

使用以下路由创建两个用户之间的聊天文档:

POST http://api.example.com/v1/chat
Run Code Online (Sandbox Code Playgroud)

当用户向另一个连接的用户发送消息并将其存储到数据库中的用户文档时,使用 socket.io 创建命名空间。该路由将创建一个命名空间和/或发出消息:

POST http://api.example.com/v1/chat/:id/message
Run Code Online (Sandbox Code Playgroud)

在客户端,你必须再次使用socket.io来监听命名空间中的消息。

可扩展性更新:

这是关于实现可扩展聊天服务器的一个很好的 stackoverflow 回答的问题:Strategy to Implement ascalable chat server

正如您在这篇文章中看到的,mongodb 可能不是存储消息的最佳解决方案。