【问题标题】:Adding Server Push to replace polling on to an asp.net WebAPI REST service添加服务器推送以替换对 asp.net WebAPI REST 服务的轮询
【发布时间】:2018-06-07 05:16:57
【问题描述】:

我希望这里的帖子不会太离题。

我有一个 asp.net webAPI 服务,它提供了许多路由来获取接近实时的数据(例如,在 10 秒内),这需要客户端应用程序轮询更改。

我正在研究哪种技术最适合添加“选择加入”推送通知服务,该服务只是推送“精简”有效负载以告诉客户端应用程序现在是时候调用现有 REST 路由进行更新了。这样一来,推送负载很小,并且不包含任何安全敏感数据(它仍然使用现有的 REST 安全基础架构来获取)

基于云的消息传递

以前,有人告诉我,对于移动应用程序,我应该使用 Firebase cloud messaging 之类的东西,或其他一些消息服务,但这似乎不是我所说的“基于订阅的通知”的正确解决方案这里。我当然可以看到这会很有用,如果客户端在 iOS 或 Android 设备上,并且想要消息/通知/警报(等),当应用程序未运行时也可以工作,但这似乎不正确使用这些更改数据的通知(可能一直发生,有时每 5 秒发生一次)。此外,我不想只针对这些移动设备,还可以针对 Web 或桌面应用程序,它们也可能使用相同的 REST 服务

其他技术

我看到提到Web sockets,或者在asp.net 的情况下,使用SignalR 的选项(它将包装Web 套接字,带有后备)。 SignalR 看起来不错,但我担心的是非 Web/Windows 应用程序(例如 iOS、Android)的客户端库的可用性。我也在看Rest Hooks。这些看起来很有趣,但我不太清楚实际的“推送机制”是什么;看起来他们需要使用 HTTP 向订阅者发布,这意味着订阅者还必须充当“服务器端点”。

在对此有任何想法/最佳实践之后,或者其他人使用了什么?

特别是(验证或其他),对于这个用例,使用基于云的消息传递不是正确的使用方式,因为这些推送通知的频率很高(即我的服务器通过另一个服务器访问应用程序的地方)推送到设备/应用程序的第 3 方服务)

提前感谢您的任何建议!

【问题讨论】:

  • 实际上,对于基于 Web 的项目,我会选择 service-worker。如果您想针对每个平台,那么 Azure 通知中心就是一个机会。如果你不需要在后台接收通知,那么像 RabbitMQ 这样的消息队列就可以做到

标签: asp.net rest asp.net-web-api


【解决方案1】:

Signalr 是一种选择

您可以在 iOS 和 android 中使用一些库。我建议你读一次https://visualstudiomagazine.com/articles/2013/11/01/how-to-use-signalr-in-ios-and-android-apps.aspx(它有点老,但很重要)

一些替代方案:

推动者 (https://pusher.com/)

Socket.IO (https://socket.io/)

讨论:

  • 为什么您只发送带有信号器的薄有效载荷?我认为这样做没有任何好处。
  • 为什么“使用基于云的消息传递不正确”?我不明白你的论点,但我不知道你的应用程序是什么样的。

【讨论】:

  • 感谢您的信息。第 1 点瘦有效负载只是更多的订阅/通知,以指示路由数据已更改。数据可能很大。在后端,有时可能会非常频繁地进行更改,而其他时候则不会那么频繁。经常,我的意思是每秒很多,在这里我只会在最后(或一段时间后)发送一个通知,只是为了告诉客户端数据已经改变。然后,只要准备好,它就会使用现有的 REST 调用来获取数据。 Point2 - 云解决方案可能太慢了??
猜你喜欢
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 2021-12-29
相关资源
最近更新 更多