REST API聊天 – 用于实时获取消息的端点

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

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

但是我需要为API消费者提供一种方式, 不重新加载页面的情况下实时有效地获取新消息。

就目前而言,您可能只是从客户端轮询GET端点,但似乎不是高性能的。 例如,客户端可以具有将在头部显示新消息的UI(某种通知)的UI

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

有没有这样的APIdevise的一些很好的例子,我可以从中得到灵感,或者你可以给我一个build议? 谢谢!

socket.io是你正在寻找的软件包。

它的文档中的命名空间部分是一个很好的解决scheme,因为命名空间可以被授权保护。 它代表了一个连接套接字池。

这是我将如何做到这一点:

为使用此路线的两个用户之间的聊天创build一个文档:

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

当用户将消息发送给另一个连接的用户并将其存储到用户的数据库文档中时,使用socket.io创build一个名称空间。 这条路线将创build一个名字空间和/或发出消息:

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

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

更新可扩展性:

这里是一个很好的stackoverflow回答关于实施一个可伸缩的聊天服务器的问题:实施一个可伸缩的聊天服务器的策略

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