问题 服务器到Phonegap推送:SignalR与Azure通知中心


好吧,我继续使用我的Phonegap应用程序开发处于两难境地:对于实时事件通知,我应该使用Azure Notification Hub还是SignalR?

据我所知,SignalR通过使用Web套接字适用于实时Web应用程序。而通知中心可以轻松地跨多个平台发送推送通知。 为了便于回复,让我解释一下我目前拥有的结构以及我的应用程序应该做什么。

该应用程序: 它基本上是一个应用程序,用户可以创建组并邀请其他用户。用户还可以使组“在线”,以便其他用户可以“输入”该组。当该群组在线且用户已进入时,他们可以发送问题,交换消息等。

需求: 当用户在组中提问或进入/离开组时,其他用户需要在应用屏幕中看到新用户。我可以在服务器上进行轮询以检查并根据更新UI,但这是现代人不允许的。我对这个主题的搜索引出了两件事:SignalR和NotificationHub。

目前的架构: 客户端 - >带有backbone.js的PhoneGap应用程序。 后端 - >带有实体框架和Azure Sql Server的Asp.NET Web API。

我已经考虑过使用通知集线器和标签了。 例如,当用户进入在线组时,它向服务器发送请求以注册“grouplisten:{groupId}”标签。然后,服务器将标签注册到用户的设备,并向标签为“grouplisten:{groupId}”的所有其他设备发出通知,以便其他用户使用最近加入的用户更新UI。此外,当用户离开组时,它向服务器发送请求以删除“grouplisten:{groupId}”标签,并且还通知具有“grouplisten:{groupId}”的设备。但是通过这个简单的例子,看起来这样会变得无法管理。


9469
2017-09-15 03:53


起源

我确信SignalR能够完成这项工作。因为你在问题中提到了websockets,所以请确保你意识到使用SignalR获取websockets需要什么。获得websockets对服务器和客户端都有很高的要求。看到 asp.net/signalr/overview/signalr-20/...  基本上你需要在客户端和服务器上使用Win8 +,否则你将获得SSE,Longpolling等 - Uffe
@Uffe客户不需要在win8 +我认为,你能验证吗? - mentat
支持websockets的@mentat浏览器不需要win8 +,但桌面和手机客户端需要win8 +。服务器总是需要win8 +和.NET4.5 +才能支持websockets。但链接描述它比我更好。 - Uffe
第一个客户端平台是Android(PhoneGap就在它上面)。 SignalR还有可能吗? - digaomatias
Cordova中的Android非常适合SignalR,因为在Android上,网络在iOS上更加可靠。您可以在Android 4.x上使用SignalR开箱即用 - codevision


答案:


这两种技术在移动平台上都有其优缺点:

SignalR

优点:

  • 非常适合实时交付,其中时间或从服务器接收通知很重要。
  • 所有主流浏览器都支持Web客户端,IE8 +,FireFox,Chrome,Safari和Android WebView,iOS Safari,IE移动,因此它们运行良好。
  • 解决方案可以用JS编写,无需了解

缺点:

  • 所需的专用服务器,但可能托管与共享主机,因为不是性能饥饿。
  • 在Cordova中,特别需要手动连接管理以获得更好的用户体验,而不是依赖SignalR提供的重新连接机制(这对于iOS来说是必需的,这可能会降低网络连接以保留电池,到目前为止Android还不是问题)。
  • 它在iOS上的Safari中存在已知问题(需要使用长轮询配置运行, 你可以在这里找到更多关于这个问题) - 在频繁的ajax请求的真实场景中 - 强制您使用SignalR Server的不同IP地址在iOS上实现无缝体验。

Azure通知中心

优点:

  • 使用Google,Apple和MS的现有基础架构向用户发送通知,并且每个都不保证立即发送通知。您必须分别阅读每个平台:
  • 不需要专用服务器

缺点:


11
2017-09-15 07:00



凉。那么通知中心的交付时间如何?您已经告诉它不保证立即交货,但最差/正常交货时间如何?例如,在我的情况下,10秒是非常可接受的,而1分钟则是太多了。 - digaomatias
不同的通知提供商有不同的规则例如,APNS(Apple)在新到达时替换现有通知。您必须分别阅读每个平台的规则以便更好地理解。通常您会立即收到消息,但您知道......我使用通知中心向用户发送广告通知,而不是使用它们来创建可靠的消息。 - codevision
看起来SignalR更适合我的情况。非常感谢! - digaomatias
那么SignalR和Cordova如何为您服务呢? - Toolkit
信号灯对我来说非常好。一般来说,它是开箱即用的工作。我有一个非常挑剔的客户,要求我手动维持连接,但过度工作就像一个魅力 - codevision