好吧,我在继续开发 Phonegap 应用程序时陷入了两难境地:对于实时事件通知,我应该使用 Azure 通知中心还是 SignalR?
据我了解,SignalR 通过使用 Web Sockets 非常适合实时 Web 应用程序。而通知中心可以轻松跨多个平台发送推送通知。
为了方便回复,让我解释一下我当前拥有的结构以及我的应用程序应该做什么。
该应用程序:
它基本上是一个应用程序,用户可以在其中创建群组并邀请其他用户。用户还可以“在线”创建一个群组,以便其他用户可以“进入”该群组。当群组在线且用户已进入时,他们可以发送问题、交换消息等。
需求:
当用户在群组中提问或进入/离开群组时,其他用户需要在应用程序屏幕中看到新用户。我可以在服务器上进行轮询来检查并更新 UI,但这是现代不允许的。我对这个主题的搜索让我找到了两件事:SignalR 和NotificationHub。
目前的架构:
客户端 -> PhoneGap 应用程序与backbone.js。
后端 -> 具有实体框架和 Azure Sql Server 的 Asp.NET Web API。
我已经对通知中心和标签的使用进行了一些思考。
例如,当用户进入在线群组时,会向服务器发送请求,注册“grouplisten:{groupId}”标签。然后,服务器向用户的设备注册该标签,并向所有其他带有标签“grouplisten:{groupId}”的设备发出通知,以便其他用户使用最近加入的用户更新 UI。此外,当用户离开群组时,它会向服务器发送请求以删除“grouplisten:{groupId}”标签,并使用“grouplisten:{groupId}”通知设备。但通过这个简单的例子,看起来这可能变得难以管理。
这两种技术在移动平台上各有优缺点:
SignalR
Pros:
- 非常适合实时交付,其中时间或从服务器接收通知很重要。
- Web 客户端受所有主流浏览器支持,IE8+、FireFox、Chrome、Safari 和 Android WebView、iOS Safari、IE mobile,因此运行良好。
- 解决方案可以用JS编写,无需了解
Cons:
- 需要专用服务器,但可能可以通过共享托管进行托管,因为对性能要求不高。
- 在 Cordova 中,特别需要手动连接管理以获得更好的用户体验,而不是依赖 SignalR 提供的重新连接机制(这对于 iOS 来说是必需的,因为 iOS 可能会断开网络连接以节省电池,但在 Android 上目前还不是问题)。
- iOS 上的 Safari 有一个已知问题(需要以长轮询配置运行,您可以在这里找到有关该问题的更多信息 https://github.com/SignalR/SignalR/issues/1406#issuecomment-17942245),在具有频繁 ajax 请求的现实场景中,强制您为 SignalR 服务器使用不同的 IP 地址,以在 iOS 上获得无缝体验。
Azure 通知中心
Pros:
- Use existing infrastructure of Google, Apple and MS to deliver notifications to the user and each of them not guarantee immediate delivery of the notifications. You have to read each platforms separately:
-
Apple: APNS 文档的质量服务部分 https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html#//apple_ref/doc/uid/TP40008194-CH100-SW4
-
Google: GCM 高级主题 https://developer.android.com/google/gcm/adv.html
- 无需专用服务器
Cons:
- 不保证立即交货。
- 需要使用每个本机平台的语言。 (Cordova 有很棒的插件https://github.com/sgrebnov/cordova-plugin-azure-notificationhub https://github.com/sgrebnov/cordova-plugin-azure-notificationhub,但当应用程序在 Android 上暂停且 iOS 上没有 64 位版本时,它不允许接收通知)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)