В Pushy зачем использовать несколько ApnsClients?

#ios #multithreading #apple-push-notifications #pushy

#iOS #многопоточность #apple-push-уведомления #pushy

Вопрос:

Ребята, если кто-нибудь использовал Pushy для отправки уведомлений Apple на устройства Apple, у меня есть основной вопрос об ApnsClient.

В документации утверждается, что «клиент может быть настроен на использование только одного соединения», но единственный способ сделать это AFAIK — использовать клиент синхронно (без лямбд); возможно, это можно настроить таким образом, но я не вижу как.

Что еще более важно, если EventLoopGroup (т. Е. threadpool) можно указать при создании клиента, зачем вообще нужно создавать более одного ApnsClient?

Pushy построен на Netty, платформе сетевых приложений, управляемой асинхронными событиями. Netty в значительной степени полагается на понятие «циклов событий», которые выполняют задачи последовательно в одном потоке. В Pushy одно подключение к серверу APNs привязано к одному циклу событий и, следовательно, к одному потоку. Вызывающие пользователи могут настраивать экземпляры ApnsClient для открытия нескольких одновременных подключений к серверу APNs и использовать EventLoopGroups (по сути, пулы потоков для циклов событий) разного размера.

Поскольку соединения привязаны к одному циклу событий (который привязан к одному потоку), никогда не имеет смысла предоставлять ApnsClient больше потоков в цикле событий, чем одновременных подключений. Клиент с восьмипоточной EventLoopGroup, настроенной на поддержание только одного соединения, будет использовать один поток из группы, но остальные семь останутся незанятыми. Открытие большого количества подключений в небольшом количестве потоков, вероятно, снизит общую эффективность за счет увеличения конкуренции за процессорное время.

Комментарии:

1. Я думаю, ответ может заключаться просто в том, что один ApnsClient связан с одним и только одним сертификатом и, следовательно, идентификатором пакета.

Ответ №1:

Я использую Pushy. Есть возможность установить количество одновременных подключений (builder.setConcurrentCOnnection()). Итак, я понимаю, что для одного клиента у нас может быть несколько одновременных подключений. Однако я пытаюсь понять, как установить размер пула потоков (EventPoolGroup).Размер пула потоков и количество concurrentConnections должны быть равны, чтобы иметь по 1 соединению на поток. Я думаю, нам нужно несколько объектов APNSClient только тогда, когда нам нужно подключиться к разным разделам на сервере APN.Даже один APNSClient может подключаться к нескольким темам, но для разделения вызовов для разных тем у нас могут быть разные клиентские объекты APNS.Вы могли бы разделить конфигурацию соединения на основе трафика.