【问题标题】:The theory of websockets with API基于 API 的 websockets 理论
【发布时间】:2016-09-11 03:21:00
【问题描述】:

我有一个在服务器上运行的 API,它处理用户连接和消息传递系统。

除此之外,我在同一台服务器上启动了一个 websocket,等待连接和其他东西。

假设我们可以通过 Android 应用访问它。

我很难弄清楚我现在应该做什么,以下是我的想法:

1 - 当用户连接到应用程序时,API 连接到 websocket。我们只允许 Android 应用程序侦听此套接字以获取新消息。当用户想要回答时,Android 应用会向 API 发送一条消息。 API 将接收到的消息写入到套接字中,该套接字将由另一个用户使用的 Android 应用程序读回。 这样,API 可以在将消息写入套接字之前将其存储在数据库中。

2- API 不会以任何方式连接到 websocket。 Android 应用在需要时侦听和写入 websocket,并且在写入 websocket 时还应该向 API 发送请求,以便它可以将消息存储在 DB 中。

可能以上都不是正确的,请告诉我

编辑

我已经明白为什么我应该使用 websocket,这似乎是拥有这个“实时”系统的最佳方式(例如在收到新消息时),而不是强制客户端每 x 秒发出一次 HTTP 请求检查是否有新消息。

我仍然不明白,它是如何与我的数据库进行通信的。对不起,如果我的例子不清楚,但我会继续努力:

我的消息系统需要将所有消息存储在我的 API 数据库中,以获取某种对话历史记录。

但似乎 websocket 必须与 API 分开运行,我的意思是它是另一个程序,对吧?因为它不适用于 HTTP 请求

那么 API 是否也应该监听这个 websocket 来捕获新消息并存储它们?

【问题讨论】:

  • 如果你不知道自己要做什么,为什么还要设置 websocket?
  • 因为我知道我需要它以某种方式获得实时系统并避免客户端过于频繁地调用 API
  • 您意识到 HTTP API 和 websocket 都可以(单独或通过某些中间件)与单个数据库通信吗?您似乎对实际发生的事情有点困惑,“API 是否也应该监听这个 websocket” 作为一个问题没有意义。
  • 一点也不,我完全不知道这里发生了什么!哈哈,但是是的,好吧,它开始有意义了

标签: websocket api-design


【解决方案1】:

您确实没有描述您的应用程序的要求,因此我们很难直接建议您的应用程序应该做什么。你真的不应该通过说你有一个 webSocket 并试图弄清楚如何处理它来开始你的分析。相反,请列出您的应用程序的要求,并找出最能满足这些要求的技术。

由于你的要求不清楚,我就说说webSocket最适合什么,更传统的http请求最适合什么。

以下是 webSocket 的一些特性:

  1. 它被设计为在更长的时间内持续连接(比客户端和服务器之间的一次交换的持续时间长得多)。
  2. 连接通常是从客户端到服务器。
  3. 一旦建立连接,就可以随时从客户端到服务器或从服务器到客户端的任一方向发送数据。这与只能由客户端请求数据的典型 http 请求有很大不同——使用 http 请求,服务器无法启动向客户端发送数据。
  4. 默认情况下,webSocket 不是请求/响应架构。事实上,要让它像请求/响应一样工作,需要在 webSocket 协议之上构建一个层,这样你就可以知道哪个响应与哪个请求对应。 http 本身就是请求/响应。
  5. 因为 webSocket 被设计为连续连接(或至少连接一段时间),所以它在两个端点之间频繁通信的情况下工作得非常好(并且开销更低)。连接已经建立,无需任何连接建立开销即可发送数据。此外,使用 webSocket 的每条消息的开销通常比使用 http 的要小。

所以,这里有几个典型的原因,您可能会选择其中一个。

  1. 如果您需要能够在不让客户端定期轮询新数据的情况下将数据从服务器发送到客户端,那么 webSocket 就是为此而精心设计的,而 http 无法做到这一点。
  2. 如果您经常发送大量小数据(例如,温度探测器每 10 秒发送一次当前温度),那么与为每个新数据发起新的 http 请求相比,webSocket 会产生更少的网络和服务器开销数据。
  3. 如果您没有上述任何一种情况,那么您可能对 webSocket 没有任何实际需求,而 http 请求/响应模型可能更简单。
  4. 如果您确实需要特定响应与特定请求相关联的请求/响应,那么它是内置在 http 中的,而不是 webSockets 的内置功能。

您可能还会发现这些其他帖子很有用:

What are the pitfalls of using Websockets in place of RESTful HTTP?

What's the difference between WebSocket and plain socket communication?

Push notification | is websocket mandatory?

How does WebSockets server architecture work?

回复您的修改

但似乎 websocket 必须与 API 分开运行, 我的意思是这是另一个程序对吗?因为它不适用于 HTTP 请求

支持您的 API 的同一进程也可以为 webSocket 连接提供服务。因此,当您在 webSocket 上获取传入数据时,您可以直接将其写入数据库,就像 API 访问数据库一样。所以,不,webSocket 服务器不必是一个单独的程序或进程。

API 也应该监听这个 websocket 来捕获新消息 并存储它们?

不,我不这么认为。只有一个进程可以监听一组传入的 webSocket 连接。

【讨论】:

  • 感谢您的详细解答,但有些事情我还是不清楚,所以我编辑了我的帖子
  • @Charrette - 我添加到可能会回复您的编辑。
  • 好的,谢谢,我现在会努力完成这项工作,现在我的思路更清晰了,谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-10-12
  • 2021-10-22
  • 1970-01-01
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 2016-02-03
相关资源
最近更新 更多