【问题标题】:REST API chat - endpoint for real-time fetching messagesREST API 聊天 - 实时获取消息的端点
【发布时间】:2015-10-04 23:52:27
【问题描述】:

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

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

有没有一些这样的 API 设计的好例子,我可以从中获得灵感,或者你可以给我一些建议?谢谢!

【问题讨论】:

标签: node.js api rest websocket chat


【解决方案1】:

socket.io 是您要查找的包。

其文档中的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 可能不是存储您的消息的最佳解决方案。

【讨论】:

  • 可扩展性如何?
  • 我更新了我的答案。有一个很好的stackoverflow帖子谈论这个。我添加了一个链接。v
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 2016-05-22
  • 2021-02-07
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多