【问题标题】:How to send messages from server to web application (angular) [closed]如何将消息从服​​务器发送到 Web 应用程序(角度)[关闭]
【发布时间】:2019-12-01 21:59:02
【问题描述】:

通常,应用程序通过发送 HTTP 请求与服务器通信。它通过 HTTP 请求发送一些数据,然后依次接收响应。

但是在构建我的应用程序时,我遇到了这样一种情况,即当特定事件发生时,后端需要向 Web 应用程序发送一些数据/消息。

我阅读了有关 WebPush 通知的信息,但我不想使用它们,因为它要求用户允许显示通知,这有点奇怪。即使使用 WebPush API,我也必须请求显示通知的权限。而且我不想依赖它,因为如果用户单击拒绝整个应用程序中断,这就是我寻找其他替代方案的原因。

我有哪些选择?

PS:我使用的后端是基于 Django Rest Framework 构建的

【问题讨论】:

  • SSE、WebSockets、来自客户端的轮询。
  • 这更多的是后端问题,然后是前端问题。 JavaScript 不关心它是 HTTP、WebSockets 还是 WebPush。您只需添加处理其中之一的代码即可。你的后端服务器是什么?您正在运行 无状态 服务器吗?它是用 PHP、C#、Java 还是 JavaScript 完成的?所有这些事情在他们如何处理这个问题上都有局限性。通常当有人问如何解决这个问题时。这是因为他们正在运行一个不能很好地处理这个问题的后端,他们正在寻找破解方法。
  • @Reactgular 后端是基于 django rest 框架构建的

标签: angular web django-rest-framework background-process


【解决方案1】:

要考虑的一件事是您是否希望/需要用户界面实时显示更改。

如果显示您的数据对时间非常敏感,您可能需要考虑像 websockets 这样的双向协议并通过此通道接收服务器更新。

模拟近乎实时的 UI 更新的另一种方法是进行轮询。 UI(在某些条件下)设置一个时间表,使用传统 API 通过 HTTP 进行定期轮询。如果可以快速提供请求的数据(不是昂贵的计算并且传输的数据量很小)并且不需要重新渲染应用程序的整个客户端,轮询可能是一个不错的选择。轮询往往是一种创可贴的解决方案,并作为事后的想法实施,因此感觉非常繁重(大量数据传输和重新渲染 UI),但如果您计划进行轻量轮询,它可能是一个不错的选择。

如果您预见到您的应用会出现更多类似“实时”的方面,您可能需要引入 websocket。不过,请注意这对您的架构和扩展意味着什么。 (有某些架构风格,例如微服务架构,使用 websocket 可能会引入更多复杂性)。浏览器兼容性也可能是一个小问题,所以我会确保您不打算支持不支持 websockets 的浏览器。

【讨论】:

  • 当有人问这个问题时,polling 通常是最好的答案。这是更安全的方法,但它确实需要另外两件事。用于跟踪您正在 轮询 以查看进度的 事物 的资源 ID,以及后端在 Http 之后 继续工作 的能力发送启动它的响应。
猜你喜欢
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多