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

2024-05-18

好吧,我在继续开发 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(使用前将#替换为@)

服务器到 Phonegap 推送:SignalR 与 Azure 通知中心 的相关文章

随机推荐

  • 如何简化这个 LESS CSS Box-shadow mixin? (带有“方向”的多个阴影)

    如何减少这段代码 可能使用循环 以拥有一个接受方向和数字的 函数 dir 想要的 方向 number 我需要多少次影子 这里是10次 color 阴影的颜色 Example 可以工作 但不是很容易使用 perspective box dir
  • 在 Android 手机中通过耳机插孔发送数据

    我目前正在处理一个新项目 我必须通过具有特定电压的耳机插孔发送数据 然后我可以在该电压上工作 所以这里我需要根据我的数据来编程具体电压 我是否可以在android中访问耳机的输出电压 然后创建一个应用程序来控制该电压 这是一篇讨论此问题的
  • 公共方法与公共 API

    在干净的代码书中 有一个观点是 公共 API 中的 Javadocs 同样 Effective java 一书也有这样的内容 项目 56 为所有公开的 API 元素编写文档注释 所以这就是我的问题 所有公共方法都被视为公共 API 吗 它们
  • 谷歌日历手表过期时间超过1个月怎么办?

    我将我的 CRM 系统与 Google 日历同步 为此 我要求push notifications从我的用户 Google 日历到我的系统 我已经成功创建了手表 并将过期时间设置为2030年 但是当我收到手表事件的响应时 它显示手表的过期时
  • 使用 DataBindingComponent 的 Inflate 方法

    当 Glide 成功渲染图像后 我在更新文本视图时看到此错误 致命异常 java lang IllegalStateException 必需 CustomBinding 类中的 DataBindingComponent 为 null 绑定适
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • 如何重复 ajax 请求,直到满足 RxJS Observable 的条件?

    我正在尝试重复请求 直到响应包含使用 RxJS 的数据 此时我想调用成功 或失败 处理程序 但我在使用 RxJS 时遇到了麻烦 这是我目前的方法 redux observable action observable mergeMap gt
  • 在 Service Fabric 应用程序中动态创建服务

    这有点描述性 所以请耐心等待 在我尝试构建的应用程序中 产品具有独特的功能 用户可以选择选择功能 A B D 但不能选择 C 我构建此功能的方式是 每个不同的功能都是一个服务 无状态 我正在考虑将数据存储在 Azure SQL 中 数据库并
  • Service Worker 与 Shared Worker

    Service Worker 和 Shared Worker 有什么区别 我什么时候应该使用 Service Worker 而不是 Shared Worker 反之亦然 Service Worker 具有共享 Worker 之外的附加功能
  • apache poi cellIterator 跳过空白单元格,但不在第一行

    我正在创建一个 java 程序来读取 Excel 工作表并创建一个逗号分隔的文件 当我运行带有空白列的示例 Excel 文件时 第一行工作正常 但其余行会跳过空白单元格 我已阅读有关将空白单元格插入行所需的代码更改 但我的问题是为什么第一行
  • 为什么这个私人浮动字段变为零?

    我有一些奇怪的行为 我很难向自己解释 称为 textureScale 的浮点字段变为零 如果某些代码正在更改该值 则可以解释这一点 然而 我希望能够通过将其设置为 私有最终浮点 来导致构建失败 或者至少是运行时异常 那么无论更改该值都将失败
  • 无法初始化 NVML:几个小时后 Docker 中出现未知错误

    我遇到有趣而奇怪的问题 当我使用 GPU 启动 docker 容器时 它工作正常 并且我看到 docker 中的所有 GPU 然而 几个小时或几天后 我无法在docker中使用GPU 当我做nvidia smi在泊坞窗机器中 我看到这条消息
  • 摩纳哥:如何添加内联自动完成/代码建议?

    我找不到任何有关如何添加内联自动完成功能的示例 如下图所示 有人可以指导我如何在摩纳哥做到这一点吗 这可以在 v1 66 中启用 现在在 Insiders 中 The editor quickSuggestions设置现在接受内联为 配置值
  • 用于网络服务器日志分析的软件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我可以得到一些关于 Apache 2 2 访问日志文件的优秀日志分析软件的建议 最好有一些理由 吗 我听说过韦巴利泽 http www w
  • dbms_xmlgen.getxml - 如何设置日期格式

    我们使用 dbms xmlgen getxml 实用程序通过 SQL 查询生成 xml 该查询从几乎 10 15 个相关表中获取数据 默认情况下 日期格式生成于dd MMM yy格式 有什么方法可以在 dbms xmlgen getxml
  • 线程睡眠和Windows服务

    我正在开发一个 Windows 服务 该服务存在一些问题Thread Sleep 所以我想我会尝试使用计时器 因为这个问题建议 在 Windows 服务中使用 Thread Sleep https stackoverflow com que
  • 对于当前月份和日期但年份不同的日期,经过的月份计算未给出正确的结果

    我正在尝试计算自特定日期以来经过的月份 该函数工作正常 尽管如果我将今天的日期与过去的不同年份放在一起 它会给我一个月的差异 不到一个月 假设对于所有日期 该函数都运行良好 除了 如果今天是 2014 03 06 YYYY MM DD 并且
  • MySQL 可选的带有 MATCH 的 LEFT JOIN

    我有以下查询 它对 MySQL Innodb 数据库中同一搜索词的两个不同表中的两列执行全文搜索 SELECT Id MATCH tb1 comment tb2 comment AGAINST search term IN BOOLEAN
  • 如何在 Entity Framework Core 中按周分组?

    在实体框架 6 中我可以使用SqlFunctions DatePart http msdn microsoft com en us library dd487171 aspx method var byWeek data GroupBy x
  • 服务器到 Phonegap 推送:SignalR 与 Azure 通知中心

    好吧 我在继续开发 Phonegap 应用程序时陷入了两难境地 对于实时事件通知 我应该使用 Azure 通知中心还是 SignalR 据我了解 SignalR 通过使用 Web Sockets 非常适合实时 Web 应用程序 而通知中心可