http - 基于推送的api设计

标签 http websocket server-sent-events

<分区>

我正在设计一个 Web API,它将为客户端(其他应用程序)提供一个机会来推送一些工作请求,立即接收该工作请求的一些 ID,然后接收该工作请求的结果。 这种交互的典型方法是什么? 由于提供工作请求的结果让我想起了服务器推送交互,我想到了 SSE(服务器发送的事件)和 webscoket 技术,倾向于 websockets(因为客户端可能对所有类型的请求使用相同的连接并接收各种响应)。这对我的目标来说是个不错的选择吗?以及如何扩展?

最佳答案

The question is about whether websocket technology suits for the described approach of api design and if not I'm wondering what is a better approach. Is it a good choice for my goal?

webSocket 连接非常适合在未来某个不确定的时间接收返回的结果,这是一种推荐的方式。

从客户端到服务器的其他请求可以是 ajax 调用或作为 webSocket 消息发送,主要取决于是否有其他原因将请求作为 ajax 调用。如果您已经建立了 webSocket 连接,那么它是与服务器通信的一种方便、简单和快速的方式。

把你所做的事情的各个部分:

Pushing some work request (from client to server).

这同样可以通过 Ajax 或 webSocket 来完成。如果没有其他原因需要一个已经建立的 webSocket 连接,那么这通常是一个 Ajax 调用。

receive immediately some id of that work request

这实际上使用 Ajax 请求更容易一些,因为 Ajax 是一种请求/响应协议(protocol),所以如果您通过 Ajax 发送工作请求,那么取回 ID 作为对该 Ajax 请求的响应将是微不足道的。您也可以通过 webSocket 实现,但 webSocket 只是一种消息传递协议(protocol)。向服务器发送工作请求时,您可以通过 webSocket 发送(如前所述)。而且,服务器随后可以立即发回工作 ID,但客户端必须开发某种方法将返回的工作 ID 与先前发送的请求相关联,因为这两条消息彼此之间没有任何自然联系。完成关联的一种方法是让客户端在发送初始请求时生成一个临时 ID 或哈希值(它实际上可以是该客户端唯一的任何内容,例如时间戳),然后服务器将发送相同的临时 ID发送工作 ID 时返回 ID。对于像 HTTP/Ajax 这样的请求/响应协议(protocol),所有这些都是微不足道的。

later receive the result of that work request

HTTP Polling、webSocket 或 SSE 都可以使用。轮询显然不是特别有效。我知道 webSocket 可以完美地解决这个问题,它可以为服务器想要以推送方式发送给客户端的任何其他项目提供一个开放的管道。 SSE 也可以用来解决这个问题(将数据推送到客户端),尽管我个人对此没有任何经验。

关于http - 基于推送的api设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42238868/

相关文章:

node.js - 在 Socket.io 中使用 HTTP 进行 TCP 通信时出现 TypeError : Cannot read property 'emit' of undefined

node.js - 如果对等点仍然使用 Nodejs WebRTC 连接,我们将如何在服务器端知道

c# - Signalr 在生产服务器中总是陷入长轮询

javascript - 在php中使用服务器发送事件从mysql获取数组

json - 如何形成 ASP.NET OData WebApi 的 PATCH 正文?

java - HTTP基本用户认证 : "Authorization" header not accepted (case-sensitive)

java - 使用 Java EE Websocket API 接收 ping

javascript - 需要找到 MQTT 的安全 Websocket 代理

php - 服务器发送事件,服务器端代码

python - 这个 HTTP/1.1 请求有什么问题?客户有时接受,有时拒绝