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

标签 node.js api rest websocket chat

我有一个由 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,它将在标题中显示新消息计数(某种通知)

我在考虑 websockets。例如,是否可以提供像 /chat/:id/subscribe 这样的端点,它将代理套接字的服务器并在客户端连接到它?

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

最佳答案

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

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

这是我的做法:

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

POST http://api.example.com/v1/chat

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

POST http://api.example.com/v1/chat/:id/message

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

可扩展性更新:

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

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

关于node.js - REST API 聊天 - 实时获取消息的端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31438890/

相关文章:

javascript - 在nodejs中使用promise的同步方式

api - 创建多个 Google/YouTube 数据 API key

java - 修改我的方法以使用PreparedStatement对象而不是Statement对象

java - Spring Boot REST 应用测试方法

javascript - 使用 Node 下载 .ttf 文件

Node.js - 可读流如何对仍在写入的文件使用react?

java - 在我的 REST 网络服务中将正则表达式作为参数传递

rest - 如何使用 Rest Assured 一次性提取 REST API 响应和状态代码

javascript - 我如何使用 json 而不是 jade 发送响应?

azure - LUIS API - 检索所有端点话语及其分数