API

时间:2016-05-15 06:25:18

标签: websocket api-design

我在服务器上运行了一个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以捕获新消息并存储它们吗?

1 个答案:

答案 0 :(得分:5)

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

由于您的要求不明确,我将谈谈最适合使用webSocket的内容以及最常用的传统http请求。

以下是webSocket的一些特征:

  1. 它被设计为在更长的持续时间内持续连接(比客户端和服务器之间的一次交换持续时间长得多)。
  2. 连接通常是从客户端到服务器。
  3. 建立连接后,数据可以随时从客户端发送到服务器,也可以从服务器发送到客户端。这与典型的http请求存在巨大差异,其中数据只能由客户端请求 - 使用http请求服务器无法启动向客户端发送数据。
  4. 默认情况下,webSocket不是请求/响应体系结构。实际上,为了使其像请求/响应一样工作,需要在webSocket协议之上构建一个层,以便您可以确定哪个响应与哪个请求相关。 http本身就是请求/响应。
  5. 由于webSocket被设计为持续连接(或至少连接一段时间),因此对于两个端点之间频繁通信的情况,它可以很好地工作(并且开销较低)。已建立连接,只需发送数据,无需任何连接建立开销。此外,对于webSocket而言,每条消息的开销通常小于使用http。
  6. 所以,这里有几个典型的原因可以让你选择其中一个。

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

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

      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连接。