Нагрузка на телефонную трубку: SignalR vs Azure Notification Hub

Ну, я в какой-то степени дилемме, чтобы продолжить разработку приложения Phonegap: для уведомления о событиях в реальном времени следует пойти с Azure Notification Hub или SignalR?

По моему пониманию, SignalR хорош для веб-приложений в реальном времени с помощью веб-сокетов. В то время как центр уведомлений упрощает отправку push-уведомлений на нескольких платформах. Чтобы было легко ответить, позвольте мне объяснить структуру, которую я сейчас имею и что должно делать мое приложение.

Приложение: Это в основном приложение, в котором пользователи могут создавать группы и приглашать других пользователей. Пользователь может также сделать группу "онлайн", чтобы другие пользователи могли "enter" группы. Пока группа находится в сети и пользователь ввел, они могут отправлять вопросы, обмениваться сообщениями и так далее.

Необходимость: Когда пользователь задает вопрос в группе или вводит/покидает группу, другим пользователям необходимо увидеть нового пользователя на экране приложения. Я мог бы сделать опрос на сервере, чтобы проверить это и обновить пользовательский интерфейс, но это то, чего не позволяют современные дни. Мои поиски по этому вопросу приводят меня к двум вещам: SignalR и NotificationHub.

Текущая архитектура: Клиент → Приложение PhoneGap с backbone.js. Backend → Web-API Asp.NET с платформой Entity Framework и сервером Azure Sql.

Я уже думал о том, как использовать для этого узлы уведомлений и теги. Например, когда пользователь вводит онлайн-группу, он отправляет запрос на сервер для регистрации тега grouplisten: {groupId}. Затем сервер регистрирует тег с помощью пользовательского устройства, а также отправляет уведомление обо всех других устройствах с тегом "grouplisten: {groupId}", поэтому другие пользователи обновляют пользовательский интерфейс недавно подключенным пользователем. Также, когда пользователь покидает группу, он отправляет запрос на сервер для удаления тега grouplisten: {groupId}, а также уведомляет устройства с помощью "grouplisten: {groupId}". Но с этим простым примером, похоже, это может стать неуправляемым.

Ответ 1

Обе технологии имеют свои плюсы и минусы на мобильных платформах:

SignalR

Плюсы:

  • Хорошо подходит для доставки в реальном времени, когда важно время или получение уведомлений с сервера.
  • Веб-клиенты поддерживаются всеми основными браузерами: IE8 +, FireFox, Chrome, Safari и Android WebView, iOS Safari, IE mobile, поэтому они работают хорошо.
  • Решение может быть написано в JS, без необходимости знать

Минусы:

  • Обязательный выделенный сервер, но возможно хостинг с общим хостингом, вероятно, так как не производительность голодная.
  • В Cordova особенно требуется ручное управление соединением для лучшего удобства пользователя, вместо того, чтобы полагаться на механизм повторного подключения, который предоставляет SignalR (это требуется для iOS, который может отключить сетевое соединение для сохранения батареи, на Android пока не проблема).
  • У этого есть известная проблема с Safari на iOS (которая должна работать с длинной конфигурацией опроса, здесь вы можете найти больше об этой проблеме), которая - в реальном мире сценарии с частыми запросами ajax - заставляет вас использовать другой IP-адрес для SignalR Server для беспрепятственного использования на iOS.

концентратор уведомлений Azure

Плюсы:

  • Используйте существующую инфраструктуру Google, Apple и MS для доставки уведомлений пользователю, и каждый из них не гарантирует немедленную доставку уведомлений. Вы должны прочитать каждую платформу отдельно:
  • Нет необходимости в выделенном сервере

Минусы:

  • Нет гарантии немедленной доставки.
  • Требуется работа с каждым языком родной платформы. (Там отличный плагин для Cordova https://github.com/sgrebnov/cordova-plugin-azure-notificationhub, но он не позволяет получать уведомления, когда приложение приостановлено на Android и не имеет 64-битной сборки на iOS)