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

dig*_*ias 11 real-time push-notification signalr asp.net-web-api cordova

好吧,我继续使用我的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}"的设备.但是通过这个简单的例子,看起来这样会变得无法管理.

cod*_*ion 12

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

SignalR

优点:

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

缺点:

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

Azure通知中心

优点:

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

缺点: